gpt4 book ai didi

c++ - 在创建对象之前确保数据的唯一性?

转载 作者:行者123 更新时间:2023-11-30 01:29:41 30 4
gpt4 key购买 nike

我有一个充满数据的文件,我需要对其进行操作。该文件的每一行都包含 float (当然表示为字符串),如下所示:

x1 y1 z1 x2 y2 z2 x3 y3 z3 r1 g1 b1 r2 g2 b2 r3 g3 b3

每一行代表我需要创建的 3 个不同的对象,例如:
Foo foo1(x1,y1,z1,r1,g1,b1);
Foo foo2(x2,y2,z2,r2,g2,b2);
Foo foo3(x3,y3,z3,r3,g3,b3);

转折是:

  1. 我只想创建尚未创建的对象。如果我已经做了 Foo使用那些完全相同的 6 个 float ,而不是创建一个新的 Foo我只想检索我已经制作的那个对象。

  2. 文件中的数据分隔不可靠——不同数字之间可能有任意数量的空格或制表符。

在我意识到这个间距问题之前,我将从文件中读取的每一行拆分为字符串,连接代表每个 foo 的字符串,然后使用 std::map<std::string,int>测试唯一性,其中 map 返回的 int 表示 std::vector<Foo*> 的索引我正在将指针指向每个 Foo我正在创建。当间距不一致时,这会失败。

我现在能想到的就是做这样的事情: http://codepad.org/hLhFzhPh (例如)但这似乎完全是古怪的。我还尝试制作一个包含 6 个浮点值的结构,重载 operator>>从 stringstream 读入它,然后制作一个 map<weirdstruct,int>但我真的不知道如何重载 operator<使这项工作。

无论如何,这看起来应该很容易,我只是不知道。有什么想法吗?

最佳答案

1:使用std::set<Foo>记录您已经构建的内容。 std::map + std::vector解决方案既不可靠,而且在修复后会矫枉过正。

2:以下跳过输入中的任何前导空格:

double x;
std::cin >> x;

和任何 std::istream 类似.

关于c++ - 在创建对象之前确保数据的唯一性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5479702/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com