如何唯一存储在存储在向量中的对象中的数据?

Posted

技术标签:

【中文标题】如何唯一存储在存储在向量中的对象中的数据?【英文标题】:How to unique my data that are stored in an object which are stored in a vector? 【发布时间】:2015-05-23 12:22:56 【问题描述】:

我想创建一种方法来消除文本文件中的重复项。

编辑:为什么我被否决了?又不是我没有在网上搜索过才问的。

例如文本文件中的数据:

Fruits:Edible:Inedible
Apple:5:10
Apple:1:2
Pear:5:1
Orange:20:1
Pear:5:1
Apple:5:10
Orange:1:20
Orange:20:1

根据这个例子,我有一类苹果、橙、梨。使用该类,我使用 set 方法创建了 3 个不同的对象向量来存储它们。

例如,如果检测到Apple

Apple.setedible(Edible);
Apple.setinedible(Inedible);

我目前可以将它们很好地存储到它们的对象向量中,这将导致:

In Apple vector:
5:10
1:2
5:10

In Orange Vector:
20:1
1:20
20:1

In Pear Vector:
5:1
5:1

我想消除基于edibleinedible 的重复项,但我不知道如何消除它们,这将导致:

In Apple vector:
5:10
1:2

In Orange Vector:
20:1
1:20

In Pear Vector:
5:1

请指教。

【问题讨论】:

【参考方案1】:

5:101:2 的类型是什么?它是一个字符串还是几个整数?我想这是我的示例的字符串。

您应该使用std::map< std::string , std::set<std::string> > 来存储您的数据。然后你可以像这个例子一样添加它,每个水果的每个字符串都是唯一的:

std::map< std::string , std::set<std::string> > data;
data["Apple"].insert("5:10");
data["Apple"].insert("1:2");
data["Apple"].insert("5:10"); // Nothing is inserted here, already exists

【讨论】:

它从一个文本文件中读取,所以一开始它是一个字符串,我在将它设置到对象之前将它转换为 int 现在,我将它们存储为一个 int 变量,没有 : 我确实想过使用mapssets。然而,到目前为止我在网上看到的所有教程都是基于一个类型的,stringint 等等,没有一个例子是基于对象的。具体来说,基于对象中的两个变量 @Zac: 所以你可以用std::set&lt;std::pair&lt;int, int&gt;&gt; 替换std::set&lt;std::string&gt;(或者你自己的结构用operator &lt; 替换这对)。 @Jarod42 是的,我刚刚替换了它,但现在我无法cout 进行测试,在我更改之前,我使用applevector[i].getEdible()applevector[i].getInedible() 进行检查跨度>

以上是关于如何唯一存储在存储在向量中的对象中的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何找到存储在 C++ 向量中的对象的类方法?

使用存储在向量中的对象的正确方法是啥?

如何将文件存储到包含 C++ 中的类对象的向量中?

OpenCV C++:根据存储在 int 向量中的索引为 Mat 类型数据创建列范围

R语言中的Factor到底是什么?

创建基类对象的向量并将派生类对象存储在其中