C++ 一组元组(i,v),使得所有元组具有不同的i值

C++ 一组元组(i,v),使得所有元组具有不同的i值,c++,stl,C++,Stl,我试图构造一组元组(I,v),其中I是一个int,v是一个double。集合不能包含具有相同值i的两个元组 为此,我想我应该使用std:tuples的std::set。比如: #include <tuple> #include <set> using namespace std; set<tuple<int, double>> mySet; #包括 #包括 使用名称空间std; 设置mySet; std::set类允许我指定一个比较器,我想我

我试图构造一组元组
(I,v)
,其中
I
是一个
int
v
是一个
double
。集合不能包含具有相同值
i
的两个元组

为此,我想我应该使用
std:tuple
s的
std::set
。比如:

#include <tuple>
#include <set>
using namespace std;

set<tuple<int, double>> mySet;
#包括
#包括
使用名称空间std;
设置mySet;

std::set
类允许我指定一个比较器,我想我应该使用它来避免不同的元组使用相同的
I
,但是我不知道怎么做???

std::tuple
已经提供了
操作符
std::tuple
已经提供了
操作符映射可能是更好的选择
std::map
。有趣的是映射的
value\u type
std::pair
,可以像元组一样使用:
std::get

映射可能是更好的选择
std::map
。有趣的是,映射的
value\u type
std::pair
,可以像元组一样使用:
std::get

我觉得这听起来像
map
。@IgorTandetnik你说得对!我不知道
map
。但我仍然想了解如何使用
set
查看对我来说听起来像
map
。@IgorTandetnik你说得对!我不知道
map
。但我仍然想了解如何使用
set
实现这一点,但我如何使用我实现的比较器
set
呢?@becko您只需在集合中添加第二个模板参数:
set mySet
。当我这样做时,我会得到一个“错误:函数模板”comparator“不是类型名”。@becko,对不起,每次我需要一个函子时,一个普通函数就可以工作了。我已经做了一个编辑,应该可以更好地工作。但是我如何让
set
使用我实现的比较器呢?@becko您只需在集合中添加第二个模板参数:
set mySet
。当我这样做时,我得到一个“错误:函数模板“comparator”不是类型名”。@becko,对不起,每次我需要一个函子时,一个普通函数就可以工作了。我做了一个编辑,应该会更好。
struct comparator
{
    bool operator()(const tuple<int, double> & lhs, const tuple<int, double> &  rhs)
    {
        return get<0>(lhs) < get<0>(rhs);
    }
};