unordered_mapとC ++のmapの違い

プロジェクトが使用されているので、unordered_mapとmapの違いを大まかに記録するために時間をかけてください

次の比較は、unordered_map(順序付けられていないマップ)に基づいています。

1.ヘッダーファイル

#include <unordered_map>
#include <map>

2. unordered_mapの内部実装:ハッシュテーブル
[およびマップは赤黒ツリーを実装しています]

3. Unordered_map検索効率:非常に高い
unordered_map内部ハッシュテーブルは、キーコード値をハッシュテーブル内の位置にマッピングすることによってレコードにアクセスします。検索の時間の複雑さは、大規模なデータ処理で広く使用されているO(1)に達する可能性があります。 。
[マップを1つずつトラバースする必要があるため、非効率的です]

4. unordered_mapが順序付けられているかどうか:Disordered
unordered_mapは内部のハッシュテーブルであるため、要素が追加されても並べ替えられません。
[そして、赤黒の木はマップ内に実装されているため、マップは要素に格納されるときに自動的にソートされ、デフォルトの昇順は]

以下のため例、
unordered_map栗を与えます:

    unordered_map<int, string> m_map;
    m_map.insert(pair<int, string>(3, "333"));
    m_map.insert(pair<int, string>(1, "111"));
    m_map.insert(pair<int, string>(4, "444"));
    m_map.insert(pair<int, string>(2, "222"));
    m_map.insert(pair<int, string>(5, "555"));

    unordered_map<int, string>::iterator iter = m_map.begin();
    for (iter; iter != m_map.end(); iter++)
    {
        cout << iter->first << "," << iter->second.c_str() << endl;
    }

出力:

3,333
1,111
4,444
2,222
5,555

unordered_map出力の結論:無秩序と見なすことができます。

マップ栗を取ります。コード内でunordered_mapをmapに置き換えるだけです。

    map<int, string> m_map;
    m_map.insert(pair<int, string>(3, "333"));
    m_map.insert(pair<int, string>(1, "111"));
    m_map.insert(pair<int, string>(4, "444"));
    m_map.insert(pair<int, string>(2, "222"));
    m_map.insert(pair<int, string>(5, "555"));

    map<int, string>::iterator iter = m_map.begin();
    for (iter; iter != m_map.end(); iter++)
    {
        cout << iter->first << "," << iter->second.c_str() << endl;
    }

出力:

1,111
2,222
3,333
4,444
5,555

マップ出力の結論:それは整然としたものとして見ることができます。

終わり:

共有することは、問題への理解を深める方法でもあります。包括的ではないかもしれませんが、間違いなく便利であり、今後も改善されていきます〜

おすすめ

転載: blog.51cto.com/15051869/2602177