セットは、キータイプのオブジェクトを格納するソート済みの関連コンテナです。 Setはシンプルアソシエーティブコンテナです。つまり、キーの種類として という値型がKeyであることを意味します。また、ユニークなアソシエイティブ コンテナです。つまり、2つの要素は同じではありません。C++でキーのセットとして<int, int>を使用できませんSTL
私は数とそれがkey
などの文字列に表示された位置でset<pair<int, int>>
を構築しようとしていました。 set
のキーとしてpair<int, int>
を挿入しようとするとpair
がユニークだったが、ペアの最初の要素が再び現れたときに
、挿入が成功しているされませんでした。
#include <iostream>
#include <set>
#include <iterator>
using namespace std;
struct compare
{
bool operator()(const pair<int, int> &lhs, const pair<int, int> &rhs)
{
return lhs.first > rhs.first;
}
};
void print(set<pair<int, int>, compare> myset)
{
for(auto iter=myset.begin(); iter!=myset.end();++iter){
cout << iter->first << ' ' << iter->second << endl;
}
}
void BuildSet(int num)
{
set<pair<int, int>, compare> values;
string number = to_string(num);
for(int i=0; i<number.size(); ++i)
{
int quot = number[i]-'0';
values.insert(make_pair(quot, i));
}
cout << endl;
print(values);
cout << endl;
}
int main() {
BuildSet(98738);
}
そして、出力されました:
9 0
8 1
7 2
3 3
最初の要素が重複していたとして不足しているエントリ8 4
で。
ええ、そうすることができます。または、単に 'std :: greater>' –
StoryTeller
@StoryTellerを使用してください。そうですね、それはきれいな方法です。私はこれを加えました。なぜなら、誰かが自分自身の 'compare'メソッドを書き留めてしまったからです。 – thebenman
あるいは、 'T == std :: pair'であっても、 'lhs> rhs; –
juanchopanza