###《Effective STL》--Chapter3

2015 단어 effective

클릭하여 Evernote 원문 보기 。

#@author:       gr
#@date:         2014-09-13
#@email:        [email protected]

Chapter3 연관 컨테이너


Topic 22: set 또는 multiset의 키를 직접 수정하지 마십시오.


요소의 값을 수정하면 다음 다섯 가지 절차를 통해 유형 변환을 피할 수 있습니다.
struct IDNumberLess : public binary_function<Employee, Employee, bool> {
    bool operator() (const Employee& lhs, const Employee& rhs){
        return lhs.idNumber() < rhs.idNumber();
    }
}
/* 1.   */
set<Employee, IDNumberLess> se;
//...
Employee selectedID;
iterator it = se.find(selectedID);
if (it != se.end()){
    /* 2.   */
    Employee tmp(*it);
    /* 3.   */
    tmp.setTitle("hello");
    /* 4.   */
    se.erase(it++);
    /* 5.   */
    se.insert(it, tmp);
}

Topic 23: 관련 용기를 정렬된vector로 대체하는 것을 고려합니다


Topic24: 효율이 중요할 때 맵::operator[]와 맵:insert 사이에서 신중하게 선택하십시오.


이 조항은 말하자면 매우 간단하다. 바로 사용map할 때 업데이트 작업이라면 사용map::operator[]이다.새 값을 삽입할 때 사용하는 경우map::insert.
map<int, Widget> m;
// ,m key 1, operator[]
m[1] = 1.5;
// , key 2 , operator[], insert
m.insert(map<int, Widget>::value_type(2, 1.50));

이 문제의 기원은 map::operator[] 낡은 값을 업데이트할 수도 있고 새 값을 삽입할 수도 있지만 map::operator[] 을 사용하여 새 값을 삽입하는 효율이 매우 낮다는 데 있다. 그는 먼저 기본 구조 함수를 호출하여 기본 대상을 만들고 인용을 되돌려 그 값을 수정한다.마지막으로 하나의 함수 판단이 업데이트인지 삽입인지 각각 호출map::operator[]map::insert을 스스로 실현할 수 있다.
  

Topic 25: 비표준 산열 용기 익숙


표준 STL 컨테이너 외에 hash_set, hash_multiset, hash_map, hash_multimap 등 다른 채널의 컨테이너도 사용할 수 있습니다.서로 다른 제공자가 실현하는 형식도 각기 다르다.SGI의 실현은 원소를 한 방향의 체인 테이블에 놓고Dinkumware의 실현은 양방향 체인 테이블을 사용하지만 메모리 소모가 더욱 크다.자신의 실제 상황에 따라 선택하다.

좋은 웹페이지 즐겨찾기