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