如何从集合中删除重复项
how to remove duplicates from a set?
我知道C++中的集合不允许重复,但我试图实现的略有不同。我的程序读取下面表格中的数据文件,导入数据并用它进行一些计算
如果我通过set1.size()
对集合进行大小计数,它将对像3 9
和3 9
这样的对进行一次计数,因为它不接受重复。然而,我也希望像3 9
和9 3
这样的东西被算作一个。
1 4
5 8
3 9
3 9
9 3
3 0
... so on
所以在上面给出的数据中(只有6行),如果我做了set1.size()
,我希望它说4。(3,9)(3,9)&(9,3)
应仅计数一次。我的代码如下,这就是我如何将数据插入到集合中,然后我稍后计算大小。
string in;
set<pair<int, int> > set1;
while (getline(fs, in)) {
istringstream iss(in);
int j, k;
if (iss >> j >> k) {
set1.insert({j, k});
}
}
}
我认为即使这样也可以:
if( iss >> j >> k){
if(j > k) set1.insert({j,k});
else set1.insert({k,j});
}
您可以将自己的自定义比较函数添加到集合中。然后,您可以将两个不同的配对视为相同。
类似这样的东西:
class MyCompare
{
public:
bool operator () (const pair<int, int> &left, const pair<int, int> &right)
{
pair<int, int> orderedLeft = left;
if (orderedLeft.first > orderedLeft.second)
swap(orderedLeft.first, orderedLeft.second);
pair<int, int> orderedRight = right;
if (orderedRight.first > orderedRight.second)
swap(orderedRight.first, orderedRight.second);
return orderedLeft < orderedRight;
}
};
然后使用以下方法声明您的集合:
set<pair<int, int>, MyCompare > set1;
显然,代码应该清理一下(删除重复等)。
相关文章:
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 处理多个异常集合的C++方法
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- 仅从无序集合中删除一个项目
- 如何从集合中删除共享的 PTR 元素
- 为什么此C 代码不起作用 - 试图删除集合中的元素时,请参考错误
- 使用指针在恒定时间内从集合中删除
- 在集合之间交换(删除/添加)
- 我应该在程序结束时删除C++中的大树集合,还是把它留给操作系统
- 如何从集合中删除重复项
- 一个有索引的集合(用于在向量中有效地删除)
- 如何从地图中的集合中删除元素
- 如何使用c++删除mongodb集合
- 从第一个集合中删除第二个集合中包含的元素,不迭代
- 从集合的向量中删除集合
- 从集合中擦除shared_ptr是否会删除托管对象
- 自动删除std:list或std::vector等集合的实例
- 为什么我的集合中的元素没有被删除?