수업기록 #map 이터레이터는 양방향, 컨테이너는 임의 접근
int main(){
map<key,value>;
}map은 사실 4항 템플릿이다. (받는 자료형이 4개다 → 키 / 밸류 / 조건자 / 얼로케이터);
map<int,int>::iterator iter = mapInt.begin();
iter->first; //키
iter->second; //밸류map에 원소를 insert 할때
- pair 객체를 이용한 원소 추가 방법
pair<int,int> myPair(1,100);
mapInt.insert(myPair);페어를 만들어줘야 함, 페어는 함수 객체 페어는 자동 0초기화가 됨.
- pair 임시 객체를 이용한 원소 추가 방법
mapInt.insert(pair<int,int>(1,100));- MakePair를 이용한 원소 추가 방법
mapInt.insert(make_pair(3,300));- Map 컨테이너 내부의 value_type을 이용한 원소 추가 방법
map<int,int>::value_type myValue(1,100);
mapInt.insert(myValue);이건 pair객체와 다르게 myValue.first = 4; 와 같은 사항은 불가함.
선언과 동시에 초기화해야함. (키 값이 중복되지 않도록 first는 const로 반환함)
- value_type의의 임시 객체를 이용한 원소 추가 방법
mapInt.insert(map<int,int>::value_type(1,100););- [*] 권장하는 방법. 키의 중복을 허용하지 않음
[]연산자를 통한 원소 추가 방법
mapInt[6] = 600;- [!] 추천하지 않음. 키가 중복되면 덮어쓰게 됨.
- 유니폼 초기화를 이용한 원소 추가 방법
mapInt.insert({1,100});- [>] 모던 C++ 부터 추가 됨.
- emplace를 이용한 원소 추가 방법
mapInt.emplace(1,100);- [>] 모던 C++ 부터 추가 됨.
insert와 동일한 동작을 하지만, 불필요한 복사/이동이 생략됨 (즉, 더 효율적임). 7번과 8번은 동일한 키값을 허용하지 않음.
map의 insert는 iterator를 반환하지 않는다. erase는 iterator로 접근했을 경우 반환 함.(다만 키값으로 접근한 경우에는 반환하지 않음.)
map의 멤버 함수
#include<algorithm>
int main(){
map<const char*, int> myMap;
myMap.insert("AAA",100);
myMap.insert("BBB",200);
myMap.insert("CCC",300);
map<const char*, int>::iterator iter = myMap.find("BBB"); //찾지 못하면 end반환
return 0;
}키 값이 포인터 형일 때에는 파일 저장 및 불러오기에서 주소를 저장하기 때문에 문자가 발생한다. 그래서 아래에서 조건자를 통해서 찾아주는 방식으로 해야 한다.
#include<algorithm>
struct tagFinder{
tagFinder(const char* pTag) : m_pTag(pTag){};
template<typename T>
bool operator()(T) const {
return std::strcmp(m_pTag, T) < 0; // 문자열 비교
}
char* m_pTag;
}
int main(){
map<const char*, int> myMap;
myMap.insert("AAA",100);
myMap.insert("BBB",200);
myMap.insert("CCC",300);
map<const char*, int>::iterator iter = myMap.find_if(myMap.begin(),myMap.end(), tagFinder("BBB") );
return 0;
}키값이 문자열일 경우 알파벳 정렬은 하나?
char인 경우 참 (아스키 코드 순서대로) char* 인 경우 : 거짓(주소값 기준 정렬) string인 경우 : 참(string 컨테이너 안에 조건자로 알파벳 시준 대소 비교 함.)
“잘게 썰다” 라는 의미의 프랑스어. 입력 데이터를 잘게 나누고 섞는 방식으로 작동한다는 점에서 착안한 용어.
수학 공식(해시 함수)를 사용하여 가변 크기의 입력에서 고정 크기의 출력을 생성하는 프로세스를 해싱이라고 한다.