簡體   English   中英

如何從向量對中刪除重復項<int, Object>

[英]How to remove duplicates from a vector of pair<int, Object>

這就是我現在正在嘗試的。 我做了一個比較功能:

bool compare(const std::pair<int, Object>& left, const std::pair<int, Object>& right)
{
    return (left.second.name == right.second.name) && (left.second.time == right.second.time) && 
        (left.second.value == right.second.value);
}

添加元素后,我調用std::unique過濾重復項:

data.push_back(std::make_pair(index, obj));
data.erase(std::unique(data.begin(), data.end(), compare), data.end());

但這似乎不起作用。 而且我不知道問題出在哪里。
從我的理解std::unique應該使用compare謂詞。

我應該如何更新代碼以使其正常工作?
我正在使用C ++ 03。

編輯:

我也曾嘗試對它進行排序,但仍然無法正常工作。

bool compare2(const std::pair<int, Object>& left, const std::pair<int, Object>& right)
{
    return (left.second.time< right.second.time);
}

std::sort(simulatedLatchData.begin(), simulatedLatchData.end(), compare2);

std::unique要求傳遞給它的范圍使所有重復的元素彼此相鄰才能工作。

您可以在范圍內使用std::sort ,然后再進行unique調用,以實現自動分類將重復項分組的目的。

排序和過濾是很好的方法,但是由於您從不希望重復,所以為什么不使用std::set呢?
而且當我們使用它時,這些對看起來像鍵值一樣可疑,那么std::map呢?

如果只想保留唯一的對象,則使用適當的容器類型,例如std::set (或std::map )。 例如

bool operator<(object const&, object const&); 

std::set<object> data;
object obj = new_object(/*...*/);
data.insert(obj);    // will only insert if unique

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM