visual擦除C++中结构向量中的重复值
visual Erase the duplicate values in a vector of structures in C++
我在C++中有一个结构向量。该结构包含一个int和两个字符串变量。我想擦除矢量中的重复值。我试过使用STD::UNIQUE,但我知道这不是正确的方法。请帮我找出解决问题的有效方法。提前谢谢。
您可以通过以下两个步骤完成:
1) 使用std::sort
和合适的二进制谓词对向量进行排序。谓词通过实现严格弱排序来设置排序标准。
2) 使用类似于erase-remove
习语的std::unique
。CCD_ 4必须以应用于步骤1中的排序的相同顺序来调用。
示例:
struct Foo
{
int a;
std::string b, c;
};
// lexicographical comparison provides strict weak ordering
bool cmp(const Foo& lhs, const Foo& rhs)
{
return std::tie(lhs.a, lhs,b, lhs.c) < std::tie(rhs.a, rhs.b, rhs.c);
}
std::vector<Foo> v = ....
std::sort(vec.begin(), vec.end(), cmp);
vec.erase(std::unique(vec.begin(), vec.end(), cmp), vec.end());
如果你真的不介意初始顺序,那么你可以对向量进行排序,然后使用唯一的方法您有一个struct的向量,因此需要定义一个运算符<。我会在中发布一些代码
假设您有以下结构
struct myStruct
{
int a;
string b;
string c;
}
您需要定义一个运算符来对元素进行排序
inline bool operator <(const myStruct& lhs, const myStruct& rhs)
{
return ( (lhs.a<rhs.a)
|| ((lhs.a==rhs.a) && (lhs.b< rhs.b))
|| ((lhs.a==rhs.a) && (lhs.b== rhs.b) (lhs.cb< rhs.c)));
}
然后,您需要对向量进行排序,并使用http://www.cplusplus.com/reference/algorithm/unique/
vector<myStruct> vMyStruct;
vMyStruct.push_back(myStruct(1,"abc","abc"));
vMyStruct.push_back(myStruct(2,"abc","abc"));
vMyStruct.push_back(myStruct(1,"abc","abc"));
vMyStruct.push_back(myStruct(2,"def","def"));
vMyStruct.push_back(myStruct(2,"def","ghi"));
vMyStruct.push_back(myStruct(3,"def","ghi"));
std::sort (vMyStruct.begin(), vMyStruct.end()); // using default comparison:
std::vector<myStruct>::iterator it = std::unique (vMyStruct.begin(), vMyStruct.end());
相关文章:
- 引用一个已擦除类型(void*)的指针
- 擦除while循环中迭代的元素
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- C++擦除(如果存在)
- 在映射擦除c++期间执行循环的次数
- 为什么擦除方法会影响结束方法
- C++ 字符串类擦除成员函数的时空复杂性
- 类型擦除的std::function与虚拟函数调用的开销
- C++结构集无法按元素查找/擦除
- 如何使用擦除删除习语从结构向量中删除值
- 根据属性值在结构向量中擦除元素
- C++多集与结构只擦除一个,快速(过载?
- 如何擦除包含结构的地图 包含结构的地图
- 从矢量中擦除元素,并向量填充结构
- 从结构类型列表中擦除元素
- 如何使用结构擦除地图中的值?[C++]
- Vector::erase()也擦除结构体的成员向量
- 如何在这个c++数据结构中处理快速插入-擦除操作
- 如何擦除或清除结构数据类型的向量
- visual擦除C++中结构向量中的重复值