C++之从txt文档读取不同z截面构成的点集

news2024/10/16 15:29:44

点集数据存在一个txt文档,每行代表一个点,依次为xyz,逗号间隔,该数据点为垂直于Z轴不同截面上的点集,按z从小到大依次排列。

现在用c++读取该文档,存到容器中,并且按z轴分组,就是把不同截面上的点做好区分,如下:

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <map>
​
struct Point {
    float x, y, z;
};
​
int main() {
    std::ifstream file("data.txt"); // 假设你的文件名为data.txt
    if (!file.is_open()) {
        std::cerr << "无法打开文件" << std::endl;
        return 1;
    }
​
    std::map<float, std::vector<Point>> pointsByZ; // 用于按z轴值分组存储点的容器
    std::string line;
    while (getline(file, line)) {
        std::istringstream iss(line);
        float x, y, z;
        char comma; // 用于读取逗号
​
        if (!(iss >> x >> comma >> y >> comma >> z)) {
            std::cerr << "读取数据失败" << std::endl;
            continue; // 跳过这一行
        }
​
        // 将读取的点添加到按z轴值分组的容器中
        pointsByZ[z].push_back({x, y, z});
    }
​
    file.close();
​
    // 遍历map,打印每个z值及其对应的点集
    for (const auto& z_points_pair : pointsByZ) {
        std::cout << "Z值: " << z_points_pair.first << std::endl;
        for (const auto& point : z_points_pair.second) {
            std::cout << "点坐标: (" << point.x << ", " << point.y << ", " << point.z << ")" << std::endl;
        }
    }
​
    return 0;
}

在这个示例中,使用了 std::map<float, std::vector<Point>> 来存储按 z 轴值分组的点。map 的键是 z 轴的值,值是一个 std::vector<Point>,它包含了所有具有相同 z 轴值的点。

在读取文件时,每读取到一个点,就根据它的 z 值将其添加到 pointsByZ 容器中对应的 vector 里。这样,所有具有相同 z 值的点都会被归类到一起。

最后,我使用了一个范围基于的 for 循环来遍历 map,并打印出每个 z 值及其对应的点集。

请注意,map 会根据键(在这个例子中是 z 轴的值)自动排序,所以输出的点集会按照 z 值的升序排列。如果你需要根据文件中点出现的顺序来保持顺序,你可能需要使用其他的数据结构,比如 std::unordered_map,或者在读取点时记录它们的顺序。

补充:

std::map 是 C++ 标准库中的一个关联容器,它存储了由键值对组成的元素。每个键值对包含一个键(key)和一个值(value)。std::map 中的元素是唯一的,这意味着每个键只能映射到一个值,而且键是有序的。

特点:

  1. 键值对存储:std::map 存储的数据是键值对,其中键是唯一的。

  2. 自动排序:std::map 根据键的顺序自动排序存储元素,通常是按照键的升序。

  3. 唯一键:每个键在 std::map 中必须是唯一的。

  4. 双向迭代器:std::map 提供了双向迭代器,可以向前和向后遍历元素。

  5. 对数时间复杂度:大多数操作(如插入、查找和删除)的时间复杂度为 O(log n)。

基本操作:

  • 插入:使用 insert 或 operator[] 插入键值对。

  • 查找:使用 find 根据键查找元素。

  • 删除:使用 erase 删除一个或多个元素。

  • 遍历:使用迭代器遍历所有元素。

示例代码:

#include <iostream>
#include <map>
​
int main() {
    // 创建一个 map,键为 int 类型,值为 string 类型
    std::map<int, std::string> myMap;
​
    // 插入元素
    myMap[1] = "Apple";
    myMap[2] = "Banana";
    myMap[3] = "Cherry";
​
    // 遍历 map 并打印键值对
    for (const auto& pair : myMap) {
        std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
    }
​
    // 查找元素
    auto it = myMap.find(2);
    if (it != myMap.end()) {
        std::cout << "Found: " << it->second << std::endl;
    } else {
        std::cout << "Not found" << std::endl;
    }
​
    // 删除元素
    myMap.erase(2);
​
    // 再次遍历 map
    for (const auto& pair : myMap) {
        std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
    }
​
    return 0;
}

输出:

Key: 1, Value: AppleKey: 3, Value: CherryFound: BananaKey: 1, Value: AppleKey: 3, Value: Cherry

在这个示例中,我们创建了一个 std::map,其中键是整数,值是字符串。我们插入了一些键值对,然后遍历 map 打印了所有的键值对。接着,我们查找了键为 2 的元素,并在找到后打印了它的值。然后,我们删除了键为 2 的元素,并再次遍历 map 打印剩余的键值对。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2119777.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web测试中如何简单定位Bug

定位bug之前要确定自己对用例的理解是否有问题。&#xff08;在工作中,很多测试结果错误都是因为自己对用例的理解没有到位&#xff0c;以致于操作错误导致结果不符合预期&#xff09; 一般来说bug分为前端bug和后端bug&#xff0c;前端bug为请求数据错误&#xff0c;后端bug为…

web基础之信息泄露

1、目录遍历漏洞 &#xff08;1&#xff09;原理&#xff1a;本质是没有过滤用户输入的 ../ 相关的目录跳转符&#xff0c;使得攻击者通过目录跳转符来遍历服务器中的任意文件。 &#xff08;2&#xff09;题解&#xff1a; eg:根据提示遍历网页目录信息&#xff0c;会在某一个…

vscode---snippets配置全局代码片段,快捷开发!

代码片段的作用&#xff1a;在开发一个项目时&#xff0c;经常会遇到好多同一个代码逻辑&#xff0c;可配置固顶逻辑的代码块&#xff0c;避免重复敲同一代码&#xff1b; 举例&#xff1a;比如跳转登录&#xff0c;需要调用app的客户端方法&#xff0c;api调用跳转&#xff1…

Web 原生组件化方案:Web Components

你好&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏、评论和关注。 Web 组件化是一种将Web应用的UI部分拆分成可复用的独立组件的架构方法。这种方法有助于提高代码的可维护性、可重用性和可测试性。 而Web Components 标准则提供了一套原生的API&#xff0c;允许开发者创建…

TestCraft - GPT支持的测试想法生成器和自动化测试生成器

在当今快速变化的软件开发世界中&#xff0c;自动化测试已成为确保软件质量的关键环节。而随着AI技术的进步&#xff0c;越来越多的工具开始引入人工智能&#xff0c;来辅助生成测试用例和自动化测试脚本。其中&#xff0c;TestCraft&#xff0c;作为一款GPT支持的测试想法生成…

天命所归,SyntaxFlow助大圣取得真经

之前预告许久的SyntaxFlow功能已经登陆Yakit&#xff01; SyntaxFlow代码查询需要先进行项目编译。 手动编译 在前端的YakRunner界面&#xff0c;主界面或选项栏可以直接点击“编译项目”功能。 可见图中红色方框圈起的选项 编译项目的选项如下&#xff1a;必选项为项目名、…

工控机防病毒/防勒索病毒如何一步搞定?

随着勒索病毒的肆虐和内部运营泄密事件的频发&#xff0c;企业数据安全正面临着前所未有的挑战。苏州深信达网络科技有限公司&#xff0c;作为数据安全解决方案的先驱&#xff0c;推出了MCK主机加固解决方案&#xff0c;为企业数据安全提供了一道坚不可摧的防线。 MCK主机加固…

Linux:多路转接 select、poll、epoll

目录 1&#xff1a;select 1. 参数解释 2. 函数返回值 3. fd_set 4. fd_set 相关接口 5. timeval 5. 常见使用 6. 理解 select 执行过程 7. select 的特点 8. select 缺点 9. select 应用 2&#xff1a;socket 就绪条件 1. 读事件就绪&#xff08;Readable&#x…

智能优化算法-海马优化算法(SHO)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍 海马优化算法 (Seahorse Optimization Algorithm, SHO) 是一种基于群体智能的元启发式优化算法&#xff0c;它模拟了海马的觅食行为、繁殖行为以及社会互动&#xff0c;用于解决复杂的优化问题。 SHO的工作机制…

精选干货!分享5款ai智能写论文软件

在当今信息爆炸的时代&#xff0c;AI智能写作工具已经成为我们写作过程中的得力助手。特别是对于学术论文的撰写&#xff0c;这些工具不仅能够提高写作效率&#xff0c;还能帮助用户生成高质量的文稿。以下是五款值得推荐的AI智能写论文软件&#xff0c;其中特别推荐千笔-AIPas…

Path系统环境变量和CLASSPATH环境变量

Path系统环境变量 概述&#xff1a;Path环境变量不是java的&#xff0c;它隶属于windows操作系统 作用&#xff1a; PATH环境变量实际上就是给windows操作系统指路的。 在Path环境变量中有很多路径&#xff0c;路径和路径之间采用 分号(;) 隔开在DOS命令窗口中输入一条DOS命…

Vscode中搭建ABAP开发环境

文章目录 前提&#xff08;在SAP系统中测试&#xff09;1.1 登录sap 系统1.2激活测服务测试1.3 添加服务 下载Vscode2.1 安装ABAP Remote filesystem 打开ABAP System3.1 按照CtrlshiftP 找到AbapFs Connect to an ABAP system 前提&#xff08;在SAP系统中测试&#xff09; 1…

2-89 基于matlab的图像去噪方法

基于matlab的图像去噪方法&#xff0c;对比了常见的几种去噪方法&#xff0c;含中值滤波&#xff0c;均值滤波&#xff0c;维纳滤波&#xff0c;高斯滤波&#xff0c;以及三种形态学滤波&#xff08;一般的&#xff0c;改进的&#xff0c;多结构元素形态学滤波&#xff09;&…

HarmonyOS开发之Tab样式(背景高亮样式)

一&#xff1a;开发环境 二&#xff1a;效果图 三&#xff1a;实现步骤 Entry Component struct TabsPage {State tabArray:string[] ["首页","分类","应用","热点","我的"]State focusIndex: number 0;State index: num…

嵌入式学习(哈希表)

哈希表中元素是由哈希函数确定的&#xff0c;将数据元素的关键字key作为自变量&#xff0c;通过一定的函数关系&#xff08;称为哈希函数&#xff09;&#xff0c;计算出的值&#xff0c;即为该元素的存储地址。 哈希函数&#xff1a;指将哈希表中元素的关键键值映射为元素存储…

局域网远程桌面工具:NoMachine 介绍、安装与使用

局域网远程桌面工具&#xff1a;NoMachine 介绍、安装与使用 NoMachine 简介Linux 安装Windows安装使用 NoMachine 简介 NoMachine是一款很常见的远程桌面工具&#xff0c;尤其在EDA领域&#xff0c;常常被用作远程接入方案。NoMachine可以用于个人远程连接&#xff0c;类似于…

4.第二阶段x86游戏实战2-CE加强修改移动速度(浮点数存放方式与转换)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

2.3.2 协程调度器实现与性能测试

LINUX 精通 8 day24 20240909 晚19&#xff1a;35 - 20: 47 课程链接地址 老师画图用的是excalidraw 可以在线 本地&#xff01; Excalidraw&#xff1a;开源实用的白板画图工具&#xff08;在线/本地安装&#xff09;-CSDN博客 2.3.2 协程调度器实现与性能测试 复习了上…

HTML/CSS/JS学习笔记 Day3(HTML--网页标签 下)

跟着该视频学习&#xff0c;记录笔记&#xff1a;【黑马程序员pink老师前端入门教程&#xff0c;零基础必看的h5(html5)css3移动端前端视频教程】https://www.bilibili.com/video/BV14J4114768?p12&vd_source04ee94ad3f2168d7d5252c857a2bf358 Day3 内容梳理&#xff1a;…

使用ChatGPT生成爆款小红书文案,有手就行!

小红书&#xff0c;作为当下热门的社交电商平台&#xff0c;以其独特的社区氛围、精准的用户画像和高粘性的互动模式&#xff0c;吸引了大量年轻用户&#xff0c;尤其是女性用户。平台上的内容风格多样&#xff0c;涵盖了美妆、时尚、生活方式等多个领域。 本文将介绍小红书平台…