0

In my application, I have a CMap of CString values. After adding the elements in the Map, if I retrieve the elements in some other place, am not getting the elements in the order of insertion.Suppose I retrieve the third element, I get the fifth like that. Is it a behavior of CMap. Why this happens?

4

2 に答える 2

8

あなたは「なぜ」を尋ねたので、ここに行きます:

Map は、キーによって値を取得する効率的な方法を提供します。リストや配列よりも高速な巧妙なデータ構造を使用してこれを行います (要素がそこにあるかどうかを知る前に、リスト全体を検索する必要があります)。メモリ使用量の増加や、他のことを実行できない (挿入された順序を知るなど) などのトレードオフがあります。

これを実装するには、2 つの一般的な方法があります。

  • ハッシュ値によってキーをバケットに入れるハッシュマップ。
  • ソート方法に従ってキーを二分木に配置するツリーマップ

マップを反復処理できますが、キーの順序 (ツリーマップ) または完全に予測不可能 (ハッシュマップ) のいずれかで、マップが内部に格納されている方法に従います。あなたの CMap はハッシュマップのようです。

いずれにせよ、挿入順序は保持されません。それが必要な場合は、追加のデータ構造 (リストなど) が必要です。

于 2013-03-21T08:47:41.113 に答える
3

ドキュメントを CMap に読み込んでみませんか? http://msdn.microsoft.com/ru-ru/library/s897094z%28v=vs.71%29.aspx

それは本当に順序付けられていないマップです。どのように要素を取得しますか? GetStartPositionGetNextAssoc? _ http://msdn.microsoft.com/ru-ru/library/d82fyybt%28v=vs.71%29.aspx読む ここにコメント

備考

反復シーケンスは予測できません。したがって、「マップの最初の要素」には特別な意味はありません。

CMap は、一意のキーを値にマップするディクショナリ コレクション クラスです。キーと値のペア (要素) をマップに挿入すると、キーを使用してペアにアクセスして効率的に取得または削除できます。マップ内のすべての要素を反復処理することもできます。

于 2013-03-21T08:40:32.627 に答える