원본:
http://www.51course.com/index.php?option=com_content&task=view&id=70&Itemid=31
1. map 의 구조 함수 map 는 모두 6 개의 구조 함 수 를 제공 합 니 다. 이것 은 메모리 분배 기 와 관련 된 것 입 니 다. 표 시 를 하지 않 습 니 다. 아래 에서 우 리 는 map 의 구조 방법 을 접 할 것 입 니 다. 여기 서 말 하고 자 하 는 것 은 다음 과 같은 방법 으로 map: map < int, string > mapStudent 를 구성 하 는 것 입 니 다.2. 데이터 가 구조 맵 용기 에 삽입 되면 우 리 는 안에 데 이 터 를 삽입 할 수 있 습 니 다.여기 서 데 이 터 를 삽입 하 는 세 가지 방법 을 설명 합 니 다. 예 1:
#pragma warning (disable:4786)
#include <string>
#include <map>
#include <iostream>
using namespace std;
typedef map<int,string> mymap;
int main()
{
mymap student;
// :
student.insert(pair<int,string>(2,"student-two"));
student.insert(mymap::value_type(3,"student-three"));
student[1] = "student-one";
mymap::iterator iter;
for(iter = student.begin(); iter != student.end(); iter++)
{
cout<<iter->first<<" "<<iter->second<<endl;
}
return 0;
}
상기 세 가지 용법 은 모두 데이터 의 삽입 을 실현 할 수 있 지만 차이 가 있 습 니 다. 물론 첫 번 째 와 두 번 째 방법 입 니 다.
효과 적 으로 똑 같이 완성 되 었 습 니 다. insert 함수 로 데 이 터 를 삽입 하고 데이터 삽입 에 있어 집합 과 관련 된 유일 성 입 니 다.
개념, 즉 맵 에 이 키워드 가 있 을 때 insert 작업 은 데 이 터 를 삽입 할 수 없 지만 배열 방식 으로 는 다 릅 니 다.
이전 키워드 에 대응 하 는 값 을 덮어 쓰 고 프로그램 으로 설명 할 수 있 습 니 다.
mapStudent.insert(map
::value_type (1, “student_one”)); mapStudent.insert(map::value_type (1, “student_two”)); 위의 두 문장 이 실 행 된 후 맵 에서 1 이라는 키워드 가 대응 하 는 값 은 'student one' 이 고 두 번 째 문장 은 효력 이 발생 합 니 다. 그러면 insert 문구 가 성공 적 으로 삽입 되 었 는 지 어떻게 알 수 있 는 지 에 관 한 문제 입 니 다. pair 로 얻 을 수 있 습 니 다. 삽입 에 성 공 했 는 지 여 부 는 다음 과 같 습 니 다. Pair::iterator, bool> Insert_Pair; Insert_Pair = mapStudent.insert(map::value_type (1, “student_one” )); 우 리 는 pair 의 두 번 째 변 수 를 통 해 삽입 성공 여 부 를 알 수 있 습 니 다. 첫 번 째 변 수 는 map 의 교체 입 니 다. 기, 삽입 에 성공 하면 InsertPair. second 는 true 여야 합 니 다. 그렇지 않 으 면 false 입 니 다. 삽입 성공 여 부 를 보 여 주 는 완료 코드 입 니 다.#pragma warning (disable:4786)
#include <map>
#include <string>
#include <iostream>
using namespace std;
typedef map<int,string> mymap;
int main()
{
map<int, string> mapStudent;
pair< mymap::iterator, bool> Insert_Pair;
Insert_Pair = mapStudent.insert(pair<int,string>(1, "student_one"));
if(Insert_Pair.second == true)
{
cout<<"Insert Successfully"<<endl;
}
else
{
cout<<"Insert Failure"<<endl;
}
Insert_Pair = mapStudent.insert(pair<int, string>(1,"student_two"));
if(Insert_Pair.second == true)
{
cout<<"Insert Successfully"<<endl;
}
else
{
cout<<"Insert Failure"<<endl;
}
mymap::iterator iter;
for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
{
cout<<iter->first<<" "<<iter->second<<endl;
}
return 0;
}
3. 맵 의 크기 맵 에 데 이 터 를 삽입 하 였 습 니 다. 현재 얼마나 많은 데 이 터 를 삽입 하 였 는 지 어떻게 압 니까? size 함수 로 사용 할 수 있 습 니 다. 법 은 다음 과 같다. Int nSize = mapStudent.size(); 4. 데이터 의 이동 여기 도 맵 을 옮 겨 다 니 는 세 가지 방법 을 제공 합 니 다. 첫 번 째: 응용 전 방향 교체 기, 위의 예 를 들 어 프로그램 이 곳곳에 있 습 니 다. 두 번 째: 반사 교체 기 를 사용 하여 다음 과 같은 예 를 들 어 효 과 를 체험 하려 면 스스로 프로그램 을 실행 하 십시오.#pragma warning (disable:4786)
#include <map>
#include <string>
#include <iostream>
using namespace std;
typedef map<int,string> mymap;
int main()
{
mymap mapStudent;
mapStudent.insert(pair<int, string>(1, "student_one "));
mapStudent.insert(pair<int, string>(2, "student_two "));
mapStudent.insert(pair<int, string>(3, "student_three "));
mymap::reverse_iterator iter;
for(iter = mapStudent.rbegin(); iter != mapStudent.rend(); iter++)
{
cout<<iter->first<< " "<<iter->second<<endl;
}
return 0;
}
세 번 째: 배열 방식 으로 프로그램 설명 은 다음 과 같다.#pragma warning (disable:4786)
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
map<int, string> mapStudent;
mapStudent.insert(pair<int, string>(1, "student_one "));
mapStudent.insert(pair<int, string>(2, "student_two "));
mapStudent.insert(pair<int, string>(3, "student_three "));
int nSize = mapStudent.size();
for(int nIndex = 1; nIndex <= nSize; nIndex++) // 1 !!!!
{
cout<<mapStudent[nIndex]<<endl;
}
return 0;
}
5. 데이터 찾기 (이 키워드 가 맵 에 있 는 지 확인 하 는 것 포함) 여기에서 우 리 는 맵 이 데이터 삽입 시 질서정연 한 장점 을 확보 한 다 는 것 을 체득 할 것 이다. 하나의 데이터 (키워드) 가 맵 에 나타 나 는 지 여 부 를 결정 하 는 방법 이 비교적 많 습 니 다. 이 제목 은 데이터 검색 이지 만, 여기에 대량의 맵 기본 용법 이 삽입 되 어 있 습 니 다. 여기 세 가지 데이터 찾기 방법 을 제시 합 니 다. 첫 번 째: count 함수 로 키워드 의 출현 여 부 를 판정 합 니 다. 그 단점 은 데이터 의 출현 위 치 를 찾 을 수 없습니다. 맵 의 특성, 1 대 1 의 맵 관 계 는 count 함수 의 반환 값 이 두 개 밖 에 없 음 을 결정 합 니 다. 0 이 든 1 이 든 나 옵 니 다. 현재 의 상황 은 당연히 1 로 돌아 가 야 한다. 두 번 째: find 함수 로 데이터 가 나타 나 는 위 치 를 찾 습 니 다. 데이터 가 나타 날 때 되 돌아 오 는 교체 기 입 니 다. 위치 에 있 는 교체 기 에 따 르 면 map 에서 찾 을 데이터 가 없 으 면 되 돌아 오 는 교체 기 는 end 함수 가 되 돌아 오 는 교체 기 와 같 습 니 다. 프로그램 설명#pragma warning (disable:4786)
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
map<int, string> mapStudent;
mapStudent.insert(pair<int, string>(1, "student_one "));
mapStudent.insert(pair<int, string>(2, "student_two "));
mapStudent.insert(pair<int, string>(3, "student_three "));
map<int, string>::iterator iter;
iter = mapStudent.find(1);
if(iter != mapStudent.end())
{
cout<<"Find, the value is: "<<iter->second<<endl;
}
else
{
cout<<"Do not Find"<<endl;
}
return 0;
}
세 번 째: 이 방법 은 데이터 가 나 타 났 는 지 아 닌 지 를 판단 하 는 데 사용 되 는데 좀 멍청해 보이 지만 여기 서 설명 하려 고 합 니 다. Lower_bound 함수 용법, 이 함 수 는 키 워드 를 찾 으 려 는 하 계 를 되 돌려 줍 니 다. (교체 기 입 니 다) Upper_bound 함수 용법, 이 함 수 는 키 워드 를 찾 을 상계 (교체 기) 를 되 돌려 줍 니 다. 예 를 들 어 맵 에 1, 2, 3, 4 가 삽입 되 어 있 으 면 lowerbound (2) 하면 돌아 오 는 2, 그리고 upper - bound (2) 하면 돌아 오 는 게 3 이에 요. Equal_range 함수 가 pair 를 되 돌려 줍 니 다. pair 의 첫 번 째 변 수 는 Lower 입 니 다.bound 되 돌아 오 는 교체 기, pair 리 면 두 번 째 교체 기 는 Upperbound 에서 되 돌아 오 는 교체 기, 이 두 개의 교체 기 가 같다 면 map 에 없 음 을 설명 합 니 다. 이 키워드 가 나타 나 면 프로그램 설명#pragma warning (disable:4786)
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
map<int, string> mapStudent;
mapStudent[1] = "student_one" ;
// mapStudent[2] = "student-two" ;
mapStudent[3] = "student_three";
mapStudent[5] = "student_five";
map<int, string>::iterator iter;
iter = mapStudent.lower_bound(2);
// 3
cout<<iter->second<<endl;
iter = mapStudent.lower_bound(3);
// 3
cout<<iter->second<<endl;
iter = mapStudent.upper_bound(2);
// 3
cout<<iter->second<<endl;
iter = mapStudent.upper_bound(3);
// 5
cout<<iter->second<<endl;
pair<map<int, string>::iterator, map<int, string>::iterator> mapPair;
//pair Lower_bound ,pair
//Upper_bound , , map
//
mapPair = mapStudent.equal_range(2);
if(mapPair.first == mapPair.second)
{
cout<<"Do not Find"<<endl;
}
else
{
cout<<"Find"<<endl;
}
mapPair = mapStudent.equal_range(3);
if(mapPair.first == mapPair.second)
{
cout<<"Do not Find"<<endl;
}
else
{
cout<<"Find"<<endl;
}
return 0;
}
6. 데이터 의 삭제 와 공백 판정 맵 의 데 이 터 를 비우 면 clear () 함수 로 맵 에 empty () 함수 가 있 는 지 확인 하고 되 돌려 줍 니 다. true 는 빈 맵 임 을 설명 합 니 다. 기타 일부 함수 용법 여기 swap, keycomp,value_comp,get_allocator 등 함수, 이 함수 들 이 프로 그래 밍 에 사용 되 는 것 이 아니 라 는 것 을 느 꼈 습 니 다. 많다 9. 정렬 여기 서 말 하고 자 하 는 것 은 비교적 깊 은 용법 입 니 다. 정렬 문제, STL 에 서 는 기본적으로 작은 번호 로 정렬 합 니 다. 이상 세대 입 니 다. 코드 는 정렬 에 있어 서 아무런 문제 가 없습니다. 위의 키 워드 는 int 형 이기 때문에 그 자체 가 번호 연산 보다 작은 것 을 지원 합 니 다. 일부 특수 한 상황, 예 를 들 어 키 워드 는 하나의 구조 체 로 정렬 과 관련 되면 문제 가 발생 할 수 있다. 왜냐하면 이것 은 번호 체조 보다 작 지 않 기 때문이다. 작, insert 등 함수 가 컴 파일 할 때 지나 갈 수 없 으 며, 아래 에 두 가지 방법 을 제시 하여 이 문 제 를 해결 합 니 다. 첫 번 째: 작은 번호 로 다시 불 러 오기, 프로그램 예#pragma warning (disable:4786)
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
map<int, string> mapStudent;
mapStudent.insert(pair<int, string>(1, "student_one"));
mapStudent.insert(pair<int, string>(2, "student_two"));
mapStudent.insert(pair<int, string>(3, "student_three"));
// , ,
// 1,
map<int, string>::iterator iter;
iter = mapStudent.find(1);
mapStudent.erase(iter);
for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
{
cout << iter->first<< " "<<iter->second<<endl;
}
cout<<endl;
mapStudent.insert(pair<int, string>(1, "student_one"));
// 1,
int n = mapStudent.erase(1);// 1, 0
for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
{
cout << iter->first<< " "<<iter->second<<endl;
}
cout<<endl;
mapStudent.insert(pair<int, string>(1, "student_one"));
// ,
// map
mapStudent.erase(mapStudent.begin(), mapStudent.end());
// , STL ,
for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
{
cout << iter->first<< " "<<iter->second<<endl;
}
cout<<"size: "<<mapStudent.size()<<endl;
return 0;
}
10. 그리고 STL 은 하나의 통 일 된 전체 이기 때문에 map 의 많은 용법 은 STL 의 다른 것 과 결합 된다. 예 를 들 어 정렬 하 는 것 이다. 위, 여기 서 기본적으로 사용 하 는 것 은 작은 번호, 즉 less < > 입 니 다. 큰 것 부터 작은 것 까지 정렬 하려 면 여기 서 관련 된 것 이 많 습 니 다. 여기 서 일일이 설명 할 수 없다. 또한 맵 에 서 는 내부 가 질서 가 있 고 빨 간 검 은 나무 가 보증 하기 때문에 많은 함수 들 이 실행 하 는 시간 복잡 도 를 설명 합 니 다. log2N 입 니 다. map 함수 로 가능 한 기능 이 고 STL Algorithm 도 이 기능 을 완성 할 수 있 습 니 다. 권장 합 니 다. map 자체 함수, 효율 이 높 습 니 다. 다음은 맵 의 공간 적 특성 입 니 다. 그렇지 않 으 면 가끔 씩 우울 하 게 표현 할 수 있 을 것 같 습 니 다. 맵 의 모든 데 이 터 는 빨간색 과 검은색 트 리 의 한 노드 에 대응 합 니 다. 이 노드 는 데 이 터 를 저장 하지 않 을 때 16 개의 바이트 를 차지 합 니 다. 부모 노드 포인터, 좌우 아이 포인터, 그리고 매 거 진 값 (빨간색 과 검은색 을 표시 하 는 것 은 균형 이 잡 힌 이 진 트 리 의 균형 에 해당 합 니 다. 인자).......................................................................
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
하나의 수조를 깊이가 가장 낮은 두 갈래 나무로 바꾸다
문제 정의:
Givena sorted(increasing order) array, write an algorithm to create abinary tree with minimal height.
생각:
이 문제는 비...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.