2014-02-21 14 views
0

我試圖構造一個元組(i, v),其中iintvdouble的。該集不能包含具有相同值i的兩個元組。元組的(I,V),使得所有元組有我的不同值

爲此,我認爲我應該使用std:tuplestd::set s。喜歡的東西:

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

set<tuple<int, double>> mySet; 

std::set類允許我指定一個比較,我想我應該利用這一點避免與i相同的值不同的元組,但我不知道該怎麼辦呢?

+0

見http://stackoverflow.com/questions/2620862/using-custom-stdset-comparator – LeartS

+2

聽起來'地圖'給我。 –

+0

@IgorTandetnik你是對的!我不知道'map'。但我仍然想了解如何使用'set' – becko

回答

2

std::tuple已經提供了一個operator<,您可以用它進行比較,但它比較了所有元組的元素。你只需要提供一個比較器來比較元組的第一個元素並忽略第二個元素。

struct comparator 
{ 
    bool operator()(const tuple<int, double> & lhs, const tuple<int, double> & rhs) 
    { 
     return get<0>(lhs) < get<0>(rhs); 
    } 
}; 
+0

來做到這一點,但是如何讓'set'使用我實現的比較器? – becko

+0

@becko您只需向該集合中添加第二個模板參數:'set <元組,比較器> mySet'。 –

+0

當我這樣做時,我得到'錯誤:函數模板「比較器」不是類型名稱「。 – becko

2

地圖可能是更好的選擇std::map<int, double>。有趣的是,地圖的value_typestd::pair<const int, double>它可以像一個元組使用:std::get ...

相關問題