前提・実現したいこと
setのイテレーターがわからない。
- s.begin()
- for(auto &p:s)文中でのp
それぞれの違いを教えてほしい。
※もし詳しい方がいらっしゃいましたら、typeidの戻り値の読み方について教えてください。
こちらのサイトを参考にしましたが、St23_Rb_tree_const_iteratorISt5tupleIJiiiEEE
やSt5tupleIJiiiEE
の網羅的な説明にはなりませんでした。
https://www.wdic.org/w/TECH/typeid
試したこと
- s.begin()をtypeidで型を確認すると、
St23_Rb_tree_const_iteratorISt5tupleIJiiiEEE
- *s.begin()をtypeidで型を確認すると、
St5tupleIJiiiEE
- for(auto &p:s)文中でのpの型を確認すると、
St5tupleIJiiiEE
- for(auto &p:s)文中での*pの型を確認すると、コンパイルエラーになった
となった。
該当のソースコード
c++
1#include <bits/stdc++.h> 2#define rep(i, n) for (int i = 0; i < (n); ++i) 3#define rep1(i, n) for (int i = 1; i <= (n); ++i) 4using namespace std; 5using ll = long long; 6using P = pair<int, int>; 7using T = tuple<int, int, int>; 8 9int main() { 10 set<T> s;//重複を許さない順序付き集合 11 12 //要素自身がキーであり、重複を許さず、追加するたびにソートされることを確認 13 s.insert(T(4,2,5)); 14 s.emplace(3,3,3); 15 s.emplace(3,2,3); 16 s.emplace(1,2,1); 17 s.emplace(3,2,3);//要素が重複するので追加されない 18 19 //各値を出力させる.要素数+1の箇所が,s.end()のようだ 20 //auto itr=s.find(T(1,2)); 21 auto itr=s.begin(); 22 for(int i=0;i<=s.size();i++){ 23 cout << get<0>(*itr) << ","<< get<1>(*itr) << ","<< get<2>(*itr) << endl; 24 itr++; 25 } 26 cout << typeid(itr).name() << endl; 27 cout << typeid(*itr).name() << endl; 28 cout << endl; 29 for(auto &p:s){//&無くても動いた 30 cout << get<0>(p) << ","<< get<1>(p) << ","<< get<2>(p) << endl; 31 cout << typeid(p).name() << endl; 32 } 33 cout << endl; 34 //出力 //1,2 //3,2 //3,3 //4,2 //4,0 35 36 37 //count 指定したキーにマッチする要素の数を返す 38 cout << s.count(T(1,2,1))<<endl;//1 39 cout << s.count(T(10,3,4))<<endl;//0 40 cout << s.count(T(4,0,0))<<endl;//0 s.end()の要素は含まれない 41 cout << endl; 42 43 //find 指定したキーで要素を探す 44 auto itr1 = s.find(T(1,2,1)); 45 cout << get<0>(*itr1) << ","<< get<1>(*itr1) << ","<< get<2>(*itr1) << endl; 46 itr1 = s.find(T(20,3,4)); 47 cout << get<0>(*itr1) << ","<< get<1>(*itr1) << ","<< get<2>(*itr1) << endl; 48 //cout << *(s.find(T(10,3)))<<endl; 49 50 //contains 51 //if(s.contains(T(1,2))) cout << "contains" << endl; 52 cout << endl; 53 54 55 return 0; 56}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。