用于存储唯一<key,value>元组的数据结构,其中<value>是最小值</value> </key,value>

时间:2013-11-19 14:23:14

标签: c++ data-structures stdmap

我要存储类型为

的数据结构元组
<(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;
}

3 个答案:

答案 0 :(得分:0)

只需要一个简单的HashMap即可。

  

具有两个属性的键类,假设为ij

     

值 - 总是最小值,即简单的int

答案 1 :(得分:0)

一个哈希表,带有一个自定义插入,如果以前看不到该键,或者新值小于前一个值,则会插入。

答案 2 :(得分:0)

您可以在C ++中使用HashMap内置类。 对于你的问题,只需一个简单的自定义,你只需要在HashMap中输入对

1)密钥不存在或

2)如果key存在,则将old-value与new-value进行比较,然后如果new-value小于旧值,则在HashMap中插入对。

供您参考,您可以使用Simple HashMap implementation in C++