これは私のイテレータ位置コードです
struct node {
int nodeid;
vector<fingerTable> fTable;
vector<string> data;
};
vector<node> cNode;
vector<node>::iterator position = find(cNode.begin(),cNode.end(), id);
約 100 個のオブジェクトを取得しました。たとえば、ノード ID "80" のインデックス/要素/位置を見つけようとしています。オブジェクトはすべてノード ID の昇順で並べ替えられていると仮定しています。
私の懸念は速度とメモリ使用量です。以前は使用していました
for(int i=0;i<cNode.size();i++)
{
//if logic-- match nodeid with the nodeid input.. then assign the i to an integer..
}
しかし今、私はイテレータを使用しようとしていますが、その方が速いと聞きました..それを修正するための提案、またはその値「nodeid」でベクトルインデックスを見つけるより良い方法はありますか
私の場合、map が適切な std コンテナーであることはわかっていますが、変更を行う時間が少し足りないので、vector に固執する必要があります。
vector<node>::iterator position = find(cNode.begin(),cNode.end(), id);
上記のイテレータ行をコンパイルしようとするとエラーが出力されます。
In member function ‘void chord::removePeer(int)’:
testfile.cpp:532:69: error: no matching function for call to ‘chord::find(std::vector<chord::node>::iterator, std::vector<chord::node>::iterator, int&)’
testfile.cpp:532:69: note: candidate is:
testfile.cpp:177:5: note: int chord::find(int, int, bool)
testfile.cpp:177:5: note: no known conversion for argument 1 from ‘std::vector<chord::node>::iterator {aka __gnu_cxx::__normal_iterator<chord::node*, std::vector<chord::node> >}’ to ‘int’