你好我有一个std :: pair对包含以下元素:
set<pair<string, int> > mapElem;
apples 1
apples 2
at 1
eating 1
eating 2
football 1
going 1
today 1
today 2
today 3
today 4
today 5
tommy 1
tommy 2
我需要找到一种方法来删除重复项并保留仅具有最高第二对的方法。 (对不起,如果这个或标题令人困惑) 编辑:如果可能,不使用std :: map!
apples 2
at 1
eating 2
football 1
going 1
today 5
tommy 2
答案 0 :(得分:5)
map<string, int> aMap(mapElem.begin(), mapElem.end());
set<pair<string, int> > Temp(aMap.begin(), aMap.end());
mapElem.swap(Temp);
没有地图:
set<pair<string, int> >::iterator nextit = mapElem.begin();
while (nextit != mapElem.end()) {
set<pair<string, int> >::iterator it = nextit++;
if (nextit != mapElem.end()) {
if (it->first == nextit->first) {
mapElem.erase(it);
}
}
}
答案 1 :(得分:1)
std::set
似乎是原始数据的一个相当奇怪的容器。
无论如何,只需遍历集合,并使用std::map
来存储具有最高值的对。对于每对,如果地图中的对具有较低的值,请更新它。
一个普通的for循环会做得很好,不要考虑for_each
等等(保持简单)。
干杯&amp;第h。,
答案 2 :(得分:1)
请注意,集合的内容首先按字符串排序,然后按整数排序。因此,要为每个字符串值删除除最高值条目以外的所有条目,请找到具有该字符串值的范围,并删除除最后一个之外的所有条目。像这样(未经测试):
for (iterator i = map.begin(); i != map.end(); ) {
for (iterator j = i; j != map.end(); ) {
iterator k = j++;
if (j == map.end() || j->first != i->first) {
map.erase(i,k);
i = j;
}
}
}