std::map
順序付きのキーと値の格納
「std::map」はCoddyKit上の無料C++ Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC++ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C++ Academyコースには全4レッスンが含まれています。
std::mapとは
std::mapはキーでソートされたキーと値のペアを格納します。各キーは一意で、検索、挿入、削除は対数時間で実行されます。
- キーはソート順に保持されます。
- 平衡二分探索木を基にしています。
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> ages;
ages["Alice"] = 30;
ages["Bob"] = 25;
std::cout << "Alice is " << ages["Alice"] << '\n';
return 0;
}要素の挿入
operator[]、insert()、またはemplace()で挿入できます。存在しないキーに[]を使用すると、そのキーがデフォルト値で作成されます。
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m;
m["one"] = 1;
m.insert({"two", 2});
m.emplace("three", 3);
std::cout << m.size() << " entries\n";
return 0;
}ソート順での反復処理
std::mapを反復処理すると、キーが昇順に処理されます。各要素は.first(キー)と.second(値)を持つstd::pairです。
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"banana", 3}, {"apple", 5}, {"cherry", 1}};
for (const auto& p : m) {
std::cout << p.first << " = " << p.second << '\n';
}
return 0;
}キーの検索
キーを安全に検索するにはfind()を使用してください。要素を指すイテレーターを返し、見つからない場合はend()を返します。
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"x", 10}, {"y", 20}};
auto it = m.find("y");
if (it != m.end()) {
std::cout << "Found y = " << it->second << '\n';
} else {
std::cout << "Not found\n";
}
return 0;
}存在確認
キーを作成せずに存在を確認するには、count()(0または1を返します)を使用するか、C++20のcontains()を使用してください。
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"a", 1}};
std::cout << m.count("a") << '\n';
std::cout << m.count("z") << '\n';
return 0;
}値の更新
キーに値を再代入すると、その値がその場で更新されます。mapはキーごとに1つの値だけを保持します。
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> score;
score["player"] = 10;
score["player"] += 5;
std::cout << score["player"] << '\n';
return 0;
}要素の削除
erase()はキーまたはイテレーターで要素を削除します。キーを指定した場合は、削除した要素の数を返します。
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"a", 1}, {"b", 2}, {"c", 3}};
m.erase("b");
std::cout << m.size() << " left\n";
for (const auto& p : m) std::cout << p.first << ' ';
std::cout << '\n';
return 0;
}at()の使用
at()はキーに対応する値への参照を返し、キーが存在しない場合はstd::out_of_rangeをスローします。[]とは異なり、要素を挿入することはありません。
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"k", 42}};
std::cout << m.at("k") << '\n';
std::cout << "size: " << m.size() << '\n';
return 0;
}単語の出現頻度を数える
std::mapの典型的な用途は出現回数のカウントです。[]演算子は新しいキーを0でデフォルト初期化するため、++をそのまま使用できます。
#include <iostream>
#include <map>
#include <string>
int main() {
std::string words[] = {"cat", "dog", "cat", "bird", "dog", "cat"};
std::map<std::string, int> freq;
for (const auto& w : words) freq[w]++;
for (const auto& p : freq) std::cout << p.first << ": " << p.second << '\n';
return 0;
}構造化束縛
C++17では構造化束縛を使って各ペアを展開し、キーと値に読みやすい名前を付けられます。
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"red", 1}, {"green", 2}};
for (const auto& [name, value] : m) {
std::cout << name << " -> " << value << '\n';
}
return 0;
}空かどうかを確認
empty()はmapに要素がないかどうかを示し、clear()はすべての要素を一度に削除します。
#include <iostream>
#include <map>
int main() {
std::map<int, int> m{{1, 1}, {2, 4}};
std::cout << std::boolalpha << m.empty() << '\n';
m.clear();
std::cout << m.empty() << '\n';
return 0;
}理解度チェック
std::mapの順序付けについての理解度を確認してください。
まとめ
std::mapについて学びました。
- 値に対応付けられた一意でソートされたキーを格納します。
insert、[]、find、count、at、eraseに対応しています。- キーの昇順で反復処理でき、構造化束縛でペアを展開できます。
次は、ソートされた一意の値だけを格納するstd::setを見ていきます。
よくある質問
「std::map」レッスンは無料ですか?
はい。「std::map」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C++ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C++ Academyコースには全4レッスンが含まれています。
「std::map」で何を学びますか?
順序付きのキーと値の格納 ブラウザで直接実行するハンズオンコードでC++ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C++ Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC++ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「std::map」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC++ Academyレッスンでコードを書いて実行できますか?
はい。すべてのC++ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。