STL :: multimapを持っており、equal_rangeで上下限を返します。この範囲内の要素の数をすべて調べ、1つずつ数えることなく見つけることはできますか?C++ STL :: multimapから範囲内の要素の数を調べる
#include <iostream>
#include <map>
using namespace std;
int main() {
multimap<int,int> mm;
pair<multimap<int, int>::iterator,multimap<int, int>::iterator> ret;
multimap<int,int>::iterator retit;
for (int n=0; n<100; n++) {
mm.insert (make_pair(rand()%10,rand()%1000));
}
ret = mm.equal_range(5);
int ct = 0;
for (retit=ret.first; retit!=ret.second; ++retit) {
cout << retit->second << endl;
ct++;
}
cout << ct << endl;
return 0;
}
感謝を!これは私にどんなスピードも救いますか?これは私が上に示しているのと同じですか?私はこのページの一番下に表示しています:http://www.cplusplus.com/reference/std/iterator/distance/それは速いかもしれませんO(1)が、これが 'ランダムであるかどうかわかりませんアクセス反復子 'かどうか。 – Travis
いいえ、時間を節約できません。ランダムアクセスイテレータ(ベクトルイテレータなど)では一定時間です。しかし、マップには双方向イテレータがあるため、線形時間の複雑さがあります。 – Naveen
ここにお越しいただきありがとうございます。 – Travis