Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用于存储唯一数据的数据结构<;关键、价值>;元组,其中<;价值>;最低限度是多少_C++_Data Structures_Stdmap - Fatal编程技术网

C++ 用于存储唯一数据的数据结构<;关键、价值>;元组,其中<;价值>;最低限度是多少

C++ 用于存储唯一数据的数据结构<;关键、价值>;元组,其中<;价值>;最低限度是多少,c++,data-structures,stdmap,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 &

我必须将这种类型的元组存储在数据结构中

<(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;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
typedef对映射键;
typedef boost::无序的_映射hmap;
typedef-hmap::迭代器hitr;
类mymap
{
公众:
hmap地图;
无效插入(标准::对p)
{
迭代器i=map.find(p.first);
如果(i==map.end()){
地图.插入(p);
}
否则{
如果(第二页){
i->second=p.second;
}
}
}
};
int main()
{
我的地图;
映射插入(标准::make_pair(映射键(1,1),10.0f));
映射插入(标准::make_pair(映射键(1,2),22.0f));
映射插入(标准::make_pair(映射键(2,1),22.0f));
映射插入(标准::make_pair(映射键(1,1),5.0f));
BOOST\u FOREACH(hmap::value\u类型i,map.map){
mapkey m=i.first;

std::cout只需一个简单的HashMap即可

Key-具有两个属性的类,假设
i
j

值-始终为最小值,即简单整数


一个哈希表,带有一个插入IF键的自定义插入,以前是看不见的,或者新值小于上一个。

在C++中可以使用hash映射在类中构建。 对于您的问题,只是一个简单的定制,您只需要在HashMap中输入pair,如果

1) 密钥不存在或不存在

2) 若键存在,则将旧值和新值进行比较,若新值小于旧值,则在HashMap中插入对


您可以使用

为什么是9,5而不是9,11或9,10?@Mal您可以使用HashMap数据结构。@Mal您想要什么?您能清楚地描述一下您的问题吗?谢谢,我正在无序地使用boost_map@Jite我想为同一个键存储我完全不知道如何定义的最低值“自定义插入,当密钥以前不可见或新值小于上一个值时插入”