我要存储类型为
的数据结构元组<(1,1),10>
<(1,1),9>
<(2,1),5>
<(1,1),11>
我需要
<(1,1),9>
<(2,1),5>
哪种数据结构最适合c ++中的这类问题?
这是我目前的解决方案/解决方法,我会继续寻找更优雅的解决方案。
#include <iostream>
#include <stdlib.h>
#include <vector>
#include <boost/unordered_map.hpp>
#include <boost/foreach.hpp>
using namespace std;
typedef pair<int, int> mapkey;
typedef boost::unordered_map<mapkey,float,boost::hash<mapkey> > hmap;
typedef hmap::iterator hitr;
class mymap
{
public:
hmap map;
void insert(std::pair<mapkey,float> p)
{
hmap::iterator i = map.find(p.first);
if(i==map.end()){
map.insert(p);
}
else{
if(p.second<i->second){
i->second=p.second;
}
}
}
};
int main()
{
mymap map;
map.insert(std::make_pair(mapkey(1,1),10.0f));
map.insert(std::make_pair(mapkey(1,2),22.0f));
map.insert(std::make_pair(mapkey(2,1),22.0f));
map.insert(std::make_pair(mapkey(1,1),5.0f));
BOOST_FOREACH(hmap::value_type i, map.map) {
mapkey m = i.first;
std::cout <<"( "<<m.first<<" , "<< m.second<<" ) > " <<i.second<<endl;
}
return 0;
}
答案 0 :(得分:0)
只需要一个简单的HashMap即可。
具有两个属性的键类,假设为
i
,j
值 - 总是最小值,即简单的int
答案 1 :(得分:0)
一个哈希表,带有一个自定义插入,如果以前看不到该键,或者新值小于前一个值,则会插入。
答案 2 :(得分:0)
您可以在C ++中使用HashMap内置类。 对于你的问题,只需一个简单的自定义,你只需要在HashMap中输入对
1)密钥不存在或
2)如果key存在,则将old-value与new-value进行比较,然后如果new-value小于旧值,则在HashMap中插入对。
供您参考,您可以使用Simple HashMap implementation in C++