C++Primer 노트 와 관련 된 용기 사용 에 대한 자세 한 설명

연관 용기
 관련 용 기 는 키 를 통 해 원 소 를 효율적으로 찾 고 읽 는 것 을 지원 합 니 다.두 기본 적 인 관련 용기 유형 은 맵 과 set 입 니 다.map 의 요 소 는 키-값 이 맞 는 형식 으로 구성 되 어 있 습 니 다.키 는 요소 가 map 의 색인 에 사용 되 고 값 은 저장 되 고 읽 은 데 이 터 를 표시 합 니 다.set 는 하나의 키 만 포함 하고 어떤 키 가 존재 하 는 지 에 대한 조 회 를 효과적으로 지원 합 니 다.set 와 map 형식의 대상 은 같은 키 에 두 번 째 요 소 를 추가 할 수 없습니다.하나의 키 가 여러 개의 인 스 턴 스 에 대응 해 야 한다 면 multimap 나 mutiset 형식 을 사용 해 야 합 니 다.이 두 가지 유형 은 여러 요소 가 같은 키 를 가 질 수 있 도록 합 니 다.
pair 형식:헤더 파일 utility 에서 정의 합 니 다.
pair 의 생 성과 사용:

#include<utility>
pair<string,int> author("Peter",30);
cout<<author.first<<"\t"<<author.second<<endl;//
// typedef
typedef pair<string,string> Student;
Student s1,s2("aaa","bbb");
s1.first="ccc";
s1.second="ddd";
// make_pair pair
string first="eee",second="fff";
Student s3=make_pair(first,second);
map 형식:map 는 키-값 이 맞 는 집합 입 니 다.
map::key_type 맵 에서 색인 키 를 사용 하 는 형식
map::mapped_type 은 map 에서 연 결 된 값 의 형식 으로 사 용 됩 니 다.
map::value_type pair 형식
map 교체 기 를 참조 하면 pair 형식의 대상 이 발생 합 니 다.

map<string,int>::iterator map_it = word_count.begin();
cout<<map_it->first<<""<<map_it->second<<endl;
아래 표 시 를 사용 하여 map 대상 에 접근 합 니 다.
키-값 을 추가 합 니 다.두 가지 실현 방법 이 있 습 니 다.insert 구성원 으로 이 루어 지 거나,아래 표 조작 부호 로 요 소 를 가 져 온 다음 에 가 져 온 요소 에 값 을 부여 할 수 있 습 니 다.
아래 표 시 를 사용 하여 맵 에 접근 하 는 것 은 아래 표 시 를 사용 하여 배열 이나 vector 에 접근 하 는 것 과 는 전혀 다른 행동 입 니 다.존재 하지 않 는 요 소 를 아래 표 시 를 사용 하면 map 용기 에 새로운 요 소 를 추가 합 니 다.키 는 다음 표 시 된 값 입 니 다.
방법 1:

map<string,int> word_count;
word_count["Peter"]=10;//
// map , , 。
map<string,int> word_count;
string word;
while(cin>>word)
{
++word_count[word];
}
방법 2:insert:

map<string,int> word_count;
word_count.insert(map<string,int>::value_type("aaa",1));
// insert
map<string,int> word_count;
string word;
while(cin>>word)
{
pair<map<string,int>::iterator,bool> ret=word_count.insert(make_pair<string,int>(word,1));
if(!ret.second)// , , +1
{
++ret.first->second;// first ,
}
}
를 사용 하여 맵 의 요 소 를 찾 고 읽 기:
 아래 표 조작 부 호 를 사용 하 는 것 은 비교적 간단 한 방법 이지 만 이 방법 은 부작용 이 있다.바로 이 키 가 맵 용기 에 없 으 면 아래 표 조작 은 이 키 를 가 진 새로운 요 소 를 삽입 하 는 것 이다.
map 용 기 는 두 가지 조작 을 제공 합 니 다:count 와 find
m.count(k)는 m 에서 k 의 출현 횟수 를 되 돌려 줍 니 다.map 대상 에 대해 서 는 1 또는 0 만 있 을 수 있 고,mutimap 용기 에 대해 서 는 더 많은 값 이 나 올 수 있 습 니 다.
m.find(k)는 k 색인 에 따라 되 돌아 오 는 교체 기 를 되 돌려 줍 니 다.
count 방법 은 맵 에서 지정 한 키 에 존재 하 는 문 제 를 찾 는 데 사용 되 며,find 방법 은 맵 용기 에서 지정 한 키 에 대응 하 는 요 소 를 찾 는 데 적합 합 니 다.

//
int occurs;
map<string,int>::iterator it= word_count.find("foobar");// , end
if(it!=word_count.end())//
{
occurs=it.second;
}
맵 대상 에서 요소 삭제:
m.erase(k)에서 m 키 가 k 인 요 소 를 삭제 합 니 다.반환 값 은 삭 제 된 요소 의 개수 입 니 다.map 용기 에 있어 서 그 값 은 0 또는 1 입 니 다.
m.erase(p)는 m 에서 교체 기 p 가 가리 키 는 요 소 를 삭제 합 니 다.반환 값 은 void 형식 입 니 다.
m.erase(b,e)는 m 에서 교체 기 범위 의 요 소 를 삭제 합 니 다.반환 값 은 void 형식 입 니 다.
map 대상 의 반복:

map<string,int> word_count;
word_count["aaa"]=1;
word_count["bbb"]=2;
word_count["ccc"]=3;
map<string,int>::const_iterator iter = word_count.begin();
while(iter!=word_count.end())
{
cout<<iter->second<<endl;
iter++;
}
set 형식:
map 용 기 는 키-값 이 맞 는 집합 이 고 set 용 기 는 단순 한 키 의 집합 입 니 다.하나의 값 이 존재 하 는 지 알 고 싶 을 때 set 용 기 를 사용 하 는 것 이 가장 적합 합 니 다.
set 에 요 소 를 추가 합 니 다:

set<int> set1;
pair<set<int>::iterator,bool> p=set1.insert(1);// pair ,
set1.insert(2);
int arr[]={1,2,3};
set<int> set2;
set2.insert(arr,arr+3);// void
set 에서 요 소 를 가 져 옵 니 다.map 방법 과 유사 하 게 find 와 count 함 수 를 사용 합 니 다.
multimap 와 multiset 형식:
map 와 set 용기 에서 하나의 키 는 하나의 인 스 턴 스 만 대응 할 수 있 습 니 다.multimap 와 multiset 형식 은 하나의 키 가 여러 개의 인 스 턴 스 에 대응 할 수 있 도록 합 니 다.지원 하 는 동작 은 맵 과 set 의 동작 과 같 습 니 다.예외 만 있 습 니 다.multiply 는 아래 표 시 된 연산 을 지원 하지 않 습 니 다.

좋은 웹페이지 즐겨찾기