2017-12-26 11 views
0

私は_cars多くのstd :: mapを返す最もエレガントな方法は何ですか?<,> :: iterator?

で車のオブジェクトのサブセットを操作する機能/クラスを記述する必要が車

std::map<CarKey, Car> _cars; 

の多くが含まれていた容器を持っている車の艦隊のプログラムに取り組んでいます

単純に私はちょうどフィルタ機能

for(auto& p : _cars){ 
    //please note: I cannot get things done with one iteration, I have to iterate many times to get things done 
    if (isOfInterest(p.second)){ 
     // do some thing 
    } 
} 

と_carsを反復処理することができ、そのような解決策の欠点は、それは私が唯一の車の10%に興味があるですが、私はを反復たくさんの時間を無駄にする必要がありますこれは良いアプローチであれば は、私は私はわからない

std::vector<std::map<CarKey, Car> :: iterator > getAllIntereted(_cars) 

が、私は単純にベクトル

を反復処理することができます興味を持ってすべてのイテレータを返すようにエレガントな方法を見つけようとしています。たぶん役立つデザインパターンがありますか?

誰でも洞察力を与えることはできますか?コードの多くを見ずに

おかげ

+0

これはおそらく、興味深い車がある範囲内にあり、それらを新しい地図として取得する場合に役立ちます。https://stackoverflow.com/questions/39080489/copy-subset-of-a-stdmap –

+1

プロファイラによって確認されたパフォーマンスの問題? – dasblinkenlight

+0

あなたのコードは完全にうまく見えます。パフォーマンスを改善したい場合は、 'isOfInterest()'を効率的にするようにしてください。いくつかの複雑な検索が含まれている場合、キャッシングによって。 – Pavel

答えて

0

は、私はあなたが良い解決策であることに興味があるだけのクルマへのポインタを含むベクトルを返すと思います。それ以外の場合は、重複オブジェクトを作成しているためです。

しかし、あなたが車を特定するループと同じループで作業することができれば、それが最善の策だと思います。それが実用的かどうかだけで決まります。

関連する問題