【发布时间】:2013-09-12 14:53:17
【问题描述】:
我有一个vector < pair <double, int> >,其中double 代表一个人的体重,int 代表那个人的ID。
现在我需要将其转换为 set < pair < double, int > > 以根据该人的 id 删除重复项,但在向量内部我有一些精度不高的数据。
示例数据:
-----------------------
double | int
-----------------------
10.234 | 1 <--
20.123 | 2
10.2 | 1 <--
30.33 | 3
如我们所见,id 1 具有不同精度的权重。
使用默认比较器std::set 将导致集合中有 4 个元素,但我只需要 3 个。
集合中应该只有 1 个带有 id 1 的元素(两个竞争对手中的任何一个都可以)。
我不使用std::map 的原因是,我需要条目按特定顺序排列:我需要它们按重量排序。出于这个原因,我使用了以下比较器:
struct comp__f {
bool operator() (const pair<double, int>& lhs, const pair<double, int>& rhs) const{
if(lhs.first < rhs.first) return true;
if(lhs.first > rhs.first) return false;
return lhs.second > rhs.second;
}
};
注意:问题仍然悬而未决,@Robᵩ 的回答并没有完全解决问题,但我感谢他的努力。
【问题讨论】:
-
你需要的“特定顺序”是什么?
标签: c++ stl operator-overloading stdvector std-pair