2011-01-03 12 views
1

私のアプリケーションのためのオブジェクトシステムを構築しています。今私は、このようなコードを持っている:マップキーのソート

​​

アイデアは、クラスObjectupdateを呼び出す)が、いくつかの順序での各オブジェクトを更新することです。

各オブジェクトにはint z_index;というメンバーがあります。そのインデックス(btw、インデックスは同じである可能性があります)のためにマップをソートするにはどうすればよいですか?

私の最初のアイデアは:のようにキー名にIDを追加します。

Object *temp = /* ... */ 
temp->z_index = 5; 
temp->name = "test"; 
mObjects[temp->z_index + temp->name] = temp; 

しかし、このコードで私は名前によってオブジェクトにアクセス失ってしまいました。

答えて

4

ブーストマルチインデックスコンテナの理想的な候補のようですね!あなたは二つのマップ、インデックスで名前一つ一つを、維持することができ

あるいは、両方(途中でスマートポインタをご覧ください - shared_ptrような!)同じオブジェクトへのポインタを保持

を以上の複合体を作成しますキーと名前とインデックスの両方をチェックできるの名前とインデックスを持つoperator<を提供します。

+0

もオプションである可能性があります。 – Naveen

+0

@Naveen、 'std :: multimap'を意味しますか? – Nim

+1

@Naveen:STLコンテナのいずれも、並行ソート述部をサポートしていません。 OPが2つのコンテナを維持したくない場合は、ブーストマルチインデックスが最適です。 – jweyrich

関連する問題