0

私が書いているアプリケーションでは、データを次のようなオブジェクトに保存します

std::vector<my_struct> db;

多くの場合、それらの要素のいくつかを参照し、それらの位置をベクトルに格納する std::set を使用する必要があります (これは変更されません)。

std::set<int> elements_i_like; 

次に、db要素にアクセスします

for ( auto it = elements_i_like.begin(); it!=elements_i_like.end(); it++){
    db[*it].do_something();
}

ただし、要素のインデックスをベクトルに格納するのではなく、それらを直接参照する方がパフォーマンスの面で優れているのでしょうか。

std::vector<my_struct> db; //where i store the data (edit form original question)
std::set<my_struct&> elements_i_like;//reference to the specific structs, stored in the vector, that i want to iterate on

そして、やります

for( auto it= elements_i_like.begin(); it!=elements_i_like.end(); it++){
    (*it).do_something();
}

また、そうすることで何らかの欠点が生じる可能性はありますか? ありがとう。

4

1 に答える 1

0

コンテナーに参照を格納することはできません。コンパイラ/言語で許可されている場合でも、各反復を評価するために 2 つの逆参照が必要になります。

ところで、C++11 が利用可能であれば、ループを次のように書き換えることができます。

for(auto& elem : elements_i_like)
    elem.do_something();
于 2013-07-08T01:57:59.390 に答える