1
我需要在容器中插入一些条目,但是,如果条目与先前插入的条目之一具有两个共同的特定属性,则它将被视为重复。删除重复的条目
棘手的部分是,如果我发现任何欺骗,我不希望任何分享这些属性值的条目成为容器的一部分(甚至不是第一个,因为它不是第一个被首次发现)。
我在考虑使用一个multimap,以一对中的两个属性作为关键字(假设两个属性有一个定义好的运算符==)和一个指向该条目的指针作为索引所有条目的值。
一旦我扫描了所有的条目并完成了我的多重映射,我将迭代遍及多重映射,并且在输出容器中添加了equal_range和std :: distance的帮助,只有我有单一事件。
假设我只想使用标准的stl容器和工具,或者最终增强库,是否是效率方面最好的方法呢?
typedef std::pair<attribute1,attribute2> key;
multimap<key, entry*> multimap;
typedef multimap<key, entry*>::iterator MultimapIter;
// process all the entries and fullfill the multimap
MultimapIter iter;
for(iter = multimap.begin(); iter != multimap.end(); ++iter)
{
std::pair<MultimapIter,MultimapIter> keyRange =
multimap.equal_range(iter->first);
if(std::distance(keyRange.first, keyRange.second) != 1)
iter = --keyRange.second;
else
// Fill the output container with the entry
}
// Destroy the multimap
为什么不使用'map'代替,并用'find'检测的发生,并将其标记为将'entry *'指定为'nullptr'。 – xiaoyi