0

全て、

次のタスクがあります。

有限数の文字列 (カテゴリ) があります。次に、各カテゴリには、チームと値のペアのセットがあります。チームの数は、ユーザーの選択に基づいて有限です。

サイズはどちらも25以下です。

これで、ユーザー入力に基づいて値が変更され、値が変更されると、チームは値に基づいて並べ替えられる必要があります。

STL にある種の自動ソートされたベクターまたはリスト コンテナーがあることを期待していましたが、見つけられたのは std::map<> だけでした。

だから私が必要だと思うのは:

struct Foo
{
    std::string team;
    double value;
    operator<();
};

std::map<std::string,std::vector<Foo>> myContainer;

値が変更されたときに std::sort() を呼び出すだけです。

または、より効率的な方法はありますか?

[編集] 私の言いたいことを明確にする必要があると思います。このように考えてみてください。

テーブルがあります。このテーブルの行はチームです。このテーブルの列はカテゴリです。この表のセルは半分に分割されています。上半分は、特定のチームのカテゴリ値です。この値は、すべてのプレーヤーで増加しています。プレーヤーがチームに追加されると、プレーヤーの得点カテゴリがチームに追加され、列のデータが並べ替えられます。したがって、カテゴリ「A」の場合、チーム 1、チーム 2 の可能性があります。カテゴリ「B」の場合は、チーム 2、チーム 1 の場合があります。次に、各チームの順位に基づいて、各チーム/カテゴリにスコアが割り当てられます。そして、そのスコアを表示する必要があります。

これが私が達成しようとしていることを明確にし、私が探しているものをより明確にすることを願っています. [/編集]

4

1 に答える 1

1

それは、マップ内のデータを変更する頻度と、std::string を検索してベクターを取得する頻度に大きく依存します。

アクセス パターンがマップ エントリの追加である場合は、ベクター内のすべてのエントリを入力してから、次のエントリにアクセスし、ベクター内のすべてのエントリを入力します。その後、ベクターのマップにランダムにアクセスすると、.. マップがない場合は、おそらく最適なコンテナーではありません。文字列とベクトルの標準ペアを含むベクトルを使用してから、すべてが追加されたら並べ替えた方がよいでしょう。

実際、上記のように構成することがおそらく最も効率的なセットアップ方法です (ただし、これが常に可能であるとは限りません)。さらに、ハッシュ比較は文字列比較より何倍も高速であるため、std::string の代わりにある種のハッシュ値を使用することを強くお勧めします。とにかく、文字列が Foo に格納されています。

ただし、 map は機能しますが、実際に何をしようとしているのかによって異なります。

于 2013-01-05T08:44:16.430 に答える