工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C++ std::map完全ガイド:連想配列の実践的活用とコード例

std::mapとは

C++標準テンプレートライブラリ(STL)において、std::mapはキー・値ペアとして要素を格納する連想コンテナです。各キーは一意であり、コンテナはキーの比較関数(デフォルトはstd::less)に従って要素を自動的にソート順で保持します。値は任意の型で、対応するキーを通じてアクセスされます。

なぜstd::mapを使うのか

構文

mapを以下のように宣言:

std::map<KeyType, ValueType> mapName;

例:

std::map<std::string, int> ageMap;

メンバ型

組み込み関数

map要素のイテレーション

イテレータを使うと、常にキーでソートされた順序で走査できます。

#include <iostream>
#include <string>
#include <map>
using namespace std;
int main() {
    map<int, string> students;
    students.insert({200, "Alice"});
    students.insert({201, "John"});
    cout << "Map size is: " << students.size() << endl;
    cout << endl << "Default map order:" << endl;
    for (auto it = students.begin(); it != students.end(); ++it) {
        cout << it->first << ": " << it->second << endl;
    }
    return 0;
}

出力:

mapのデフォルト順序での走査結果

std::mapへのデータ挿入

新規エントリにはinsert()を使用;重複キーは無視されます。既存キーを上書きするにはinsert_or_assign()を使用。

#include <map>
#include <iostream>
using namespace std;
int main() {
    map<int, int> m{{1,3},{2,4},{3,5}};
    m.insert({5,6}); // 新しいペアを追加
    m.insert({1,8}); // 無視される(キー1は既存)
    m.insert_or_assign(1,6); // キー1の値を6に更新
    cout << "Key\tElement\n";
    for (auto& p : m) {
        cout << p.first << '\t' << p.second << '\n';
    }
    return 0;
}

出力:

挿入・更新後のmap内容

mapでの検索

find()でキーを検索します。キーが存在すればイテレータが要素を指し、なければend()が返されます。

#include <iostream>
#include <map>
using namespace std;
int main() {
    map<int, string> students;
    students.insert({200, "Alice"});
    students.insert({201, "John"});
    if (auto it = students.find(201); it != students.end()) {
        cout << "Key 201 has value: " << it->second << endl;
    }
    return 0;
}

出力:

find()によるキー検索結果

mapからのデータ削除

要素はキーまたはイテレータで削除可能。erase()は削除された要素を指すイテレータのみを無効化します。

#include <iostream>
#include <map>
using namespace std;
int main() {
    map<string, int> myMap;
    myMap["cow"] = 1;
    myMap["cat"] = 2;
    myMap["lion"] = 3;
    if (auto it = myMap.find("cat"); it != myMap.end()) {
        myMap.erase(it);
    }
    for (auto& p : myMap) {
        cout << p.first << ": " << p.second << endl;
    }
    return 0;
}

出力:

削除後のmap内容

まとめ

C言語

  1. C言語 標準ライブラリ関数: 実践ガイド
  2. C++演算子を徹底解説:種類、例、サンプルプログラム付き
  3. C++ do-while文:構文、実践例、ネストしたループ
  4. C++ switch文をマスター:構文、使い方、実践例
  5. C++動的配列の確保をマスター:コード例付き実践ガイド
  6. C++ポインタをマスター:概念、例、実践的応用
  7. C++演算子オーバーロード:コード例付き実践ガイド
  8. C++構造体を実例で徹底解説
  9. C++のstd::listをマスターする:構文、関数、実践例
  10. C++関数を実例で徹底解説:基本から応用まで
  11. C++ structとclassの違い:構文、特徴、使い分けのベストプラクティス