c++ - 删除对象列表中的相似项目

标签 c++

我正在填充 std::list<item*> items从文本文件中列出,但有些情况下名称变量相同,在这些情况下我想删除重复的项目(具有相同名称的项目,该项目的其他信息无关紧要)但从该对象获取数据添加到“原始”(项目的第一个实例)

因为我希望能够加载多个信息,也就是将各种类型的数组加载到“项目”中,这就是我到目前为止想出的

我尝试遍历项目,然后再次循环并检查第一个循环与第二个循环,复制信息并添加到第一个循环项目的数组,但它只是中断。

建议?

与此类似:Removing duplicates in a vector of strings 除了我想使用在任何拷贝中找到的信息并将其添加到 std::list项目对象持有

所以如果我加载这个:

Set Normal DIfficulty|Sets your save game to normal difficulty|/JKSV/Saves/Fire_Emblem__Awakening/hack/Chapter0|0x0D|0x00
Set Normal DIfficulty|Sets your save game to normal difficulty|/JKSV/Saves/Fire_Emblem__Awakening/hack/Chapter0|0x0F|0x0A
Set Hard DIfficulty|Sets your save game to hard difficulty|/JKSV/Saves/Fire_Emblem__Awakening/hack/Chapter0|0x0D|0x01
Set Lunatic DIfficulty|Sets your save game to lunatic difficulty|/JKSV/Saves/Fire_Emblem__Awakening/hack/Chapter0|0x0D|0x02
Set Lunatic+ DIfficulty|Sets your save game to lunatic+ difficulty|/JKSV/Saves/Fire_Emblem__Awakening/hack/Chapter0|0x0D|0x03

它只会有 1 Set Normal Difficulty项目,但该项目将保留重复的最后 2 条信息(又名 0x0F|0x0A

最佳答案

如果你想要你的 std::list<T>要删除重复值,您必须调用 unique成员函数。它有两个重载。首先取 0 个参数并使用 operator== 比较值.这不是你的情况,因为你的列表包含指针,你不需要比较地址但 name成员。所以尝试第二个。它需要一个二元谓词,您可以在其中比较成员

std::list<item*> myList;
//   populate your list..

//   sort it before calling unique..
myList.sort([](const item *lhs,const item *rhs)->bool{
    return lhs->name < rhs->name;
});
myList.unique([](const item *lhs,const item *rhs)->bool{
    return lhs->name == rhs->name;
});
//   now your list has no duplicates..

更多信息 here .

关于c++ - 删除对象列表中的相似项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37507253/

相关文章:

c++ - 如何对拉伸(stretch)的矩形进行斜切

C++ 隐藏符号增加重定位时间

c++ - const * const 的预处理器简写

c++ - 为什么 C++ 编译器不在下一行输出文本,而在其间放置空格时却输出文本?

c++ - 如何让 QT 在 Mac 上为 Windows 生成可执行文件?

c++ - 在释放内存时陷入无限循环

c++ - 替换C++字符串中的标点符号

c++ - 使用虚拟派生方法返回不同的迭代器

c++ - 从输入中获取数字和单位作为 double 和字符串——编程 : Principles and Practices Using C++

c# - 从 C# 调用 C++ dll 函数