我正在填充 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/