std::map은 C++ 표준 라이브러리에서 제공하는 연관 컨테이너 중 하나로, **키-값 쌍(key-value pair)**을 효율적으로 저장하고 관리할 수 있는 자료구조입니다. 이번 포스트에서는 std::map의 주요 특징, 사용법, 그리고 실무에서의 활용 예제를 소개하겠습니다.
std::map은 **키(key)**와 **값(value)**을 연관시켜 저장하는 정렬된 연관 컨테이너입니다. 키를 기준으로 자동으로 정렬되며, **이진 검색 트리(Red-Black Tree)**를 기반으로 구현되어 있어 탐색, 삽입, 삭제가 **O(log n)**의 시간 복잡도를 가집니다.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> scores;
// 값 삽입
scores["Alice"] = 90;
scores["Bob"] = 85;
scores["Charlie"] = 88;
// 값 출력
for (const auto& pair : scores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
// 특정 키 검색
std::string name = "Alice";
if (scores.find(name) != scores.end()) {
std::cout << name << "의 점수: " << scores[name] << std::endl;
}
return 0;
}
Alice: 90
Bob: 85
Charlie: 88
Alice의 점수: 90
함수/메서드설명
insert() | 키-값 쌍을 삽입합니다. |
find() | 특정 키를 검색합니다. |
erase() | 특정 키를 삭제합니다. |
size() | map에 저장된 요소의 개수를 반환합니다. |
clear() | 모든 요소를 삭제합니다. |
empty() | map이 비어 있는지 확인합니다. |
std::map<int, std::string> students;
students.insert({1, "Alice"});
students.insert({2, "Bob"});
students.insert({3, "Charlie"});
if (students.find(2) != students.end()) {
std::cout << "학생 번호 2: " << students[2] << std::endl;
}
실제 프로젝트에서 std::map을 활용하여 I/O 매핑 설정을 관리하는 예제를 살펴보겠습니다.
#include <map>
#include <string>
#include <iostream>
#include <Windows.h>
class CIOSettingManager {
private:
std::map<std::string, int> m_mapIOBitNum;
public:
CIOSettingManager() {
// 기본값 설정
m_mapIOBitNum["Red"] = 1;
m_mapIOBitNum["Yellow"] = 2;
m_mapIOBitNum["Green"] = 3;
m_mapIOBitNum["Blue"] = 4;
}
void LoadFromINI(const std::string& iniFilePath) {
char buffer[256];
for (const auto& pair : m_mapIOBitNum) {
GetPrivateProfileString("IOMapping", pair.first.c_str(), std::to_string(pair.second).c_str(), buffer, sizeof(buffer), iniFilePath.c_str());
m_mapIOBitNum[pair.first] = std::stoi(buffer);
}
}
void PrintMappings() {
for (const auto& pair : m_mapIOBitNum) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
}
};
int main() {
CIOSettingManager ioManager;
// INI 파일에서 설정 값 로드
ioManager.LoadFromINI("settings.ini");
// 매핑 정보 출력
ioManager.PrintMappings();
return 0;
}
Red: 1
Yellow: 2
Green: 3
Blue: 4
Red: 10
Yellow: 20
Green: 30
Blue: 40
std::map은 키-값 쌍을 관리하고, 빠른 검색이 필요한 상황에서 매우 유용한 컨테이너입니다. 특히 실무에서 I/O 매핑 설정과 같은 작업에서 자주 활용되며, INI 파일과 연동하여 사용자 설정을 유연하게 관리할 수 있습니다.
std::map을 활용하면 더 효율적인 프로그램을 개발 가능합니다.
C++에서의 ThreadPool 활용과 기존 Thread 생성 방식 비교 (0) | 2024.04.30 |
---|