C++ STL set/multset

9900 단어 stlset
본문http://www.cnblogs.com/yongqiang/p/5746754.html set 용기 안의 요 소 는 자동 으로 정렬 됩 니 다.set 는 map 와 달리 set 의 요 소 는 키 값 이자 실제 값 입 니 다.set 는 두 요소 가 같은 키 값 을 가 지 는 것 을 허용 하지 않 습 니 다.set 의 교체 기 를 통 해 set 요 소 를 수정 할 수 없습니다.요 소 를 수정 하면 set 조직 을 파괴 하기 때 문 입 니 다.용기 에 있 는 요 소 를 삽입 하거나 삭제 할 때 작업 전의 모든 교체 기 는 작업 후에 도 유효 합 니 다.multiset 특성 및 용법 은 set 와 완전히 같 습 니 다.유일한 차 이 는 키 값 을 중복 할 수 있 도록 하 는 것 입 니 다.set 와 multiset 의 밑바닥 실현 은 효율 적 인 균형 이 진 트 리,즉 붉 은 검 은 나무(Red-Black Tree)이다.다음 코드 와 관련 된 내용:
1.set 용기 에서 요소 유형 은 기본 유형 입 니 다.어떻게 set 를 사용자 의 뜻 에 따라 정렬 합 니까?
2.set 용기 에서 요소 형식 을 사용자 정의 형식 으로 어떻게 합 니까?
3.set 용기 의 insert 함수 의 반환 값 은 왜 유형 입 니까?
#include 
#include 
#include 
using namespace std;

/*    CompareSet, test02   */
class CompareSet
{
public:
    //      
    bool operator()(int v1, int v2)
    {
        return v1 > v2;
    }
    //      
    //bool operator()(int v1, int v2)
    //{
    //    return v1 < v2;
    //}
};

/* Person ,  test03 */
class Person
{
    friend ostream &operator<const Person &person);
public:
    Person(string name, int age)
    {
        mName = name;
        mAge = age;
    }
public:
    string mName;
    int mAge;
};

ostream &operator<const Person &person)
{
    out << "name:" << person.mName << " age:" << person.mAge << endl;
    return out;
}

/*    ComparePerson,  test03 */
class ComparePerson
{
public:
    //       ,      ,       
    bool operator()(const Person &p1, const Person &p2)
    {
        if (p1.mName == p2.mName)
        {
            return p1.mAge > p2.mAge;
        }
        return p1.mName > p2.mName;
    }
};

/*   set        */
template<typename T>
void PrintSet(T &s)
{
    for (T::iterator iter = s.begin(); iter != s.end(); ++iter)
        cout << *iter << " ";
    cout << endl;
}

void test01()
{
    //set          
    set<int> s;
    s.insert(10);
    s.insert(20);
    s.insert(30);

    //  set
    PrintSet(s);
    //   :10 20 30

    /* set insert          (pair)。
              first set      :
       1、     ,        。
       2、     ,              

              seconde bool  :
       1、     ,bool  true
       2、     ,bool  false
    */
    pair<set<int>::iterator, bool> ret = s.insert(40);
    if (true == ret.second)
        cout << *ret.first << "     " << endl;
    else
        cout << *ret.first << "     " << endl;
}

void test02()
{
    /*     set        ,   set 
               ,       CompareSet
    */
    set<int, CompareSet> s;
    s.insert(10);
    s.insert(20);
    s.insert(30);

    //  set
    PrintSet(s);
    //   :30,20,10
}

void test03()
{
    /* set     Person, set             
          set       ,            ,
                
    */
    set s;
    s.insert(Person("John", 22));
    s.insert(Person("Peter", 25));
    s.insert(Person("Marry", 18));
    s.insert(Person("Peter", 36));

    //  set
    PrintSet(s);
}

int main(void)
{
    //test01();
    //test02();
    //test03();
    return 0;
}

  set         

다음 코드 와 관련 된 내용:
1.multiset 용기 의 insert 함수 반환 값 은 왜 입 니까?
#include 
#include 
using namespace std;

/*   set        */
template<typename T>
void PrintSet(T &s)
{
    for (T::iterator iter = s.begin(); iter != s.end(); ++iter)
        cout << *iter << " ";
    cout << endl;
}

void test(void)
{
    multiset<int> s;
    s.insert(10);
    s.insert(20);
    s.insert(30);

    //  multiset
    PrintSet(s);

    /* multiset insert      multiset      ,
               。multiset        ,  
             ,       bool  。
    */
    multiset<int>::iterator iter = s.insert(10);

    cout << *iter << endl;    
}

int main(void)
{
    test();
    return 0;
}

  multiset         

**set 구조 함수 기능**
  • set st set 기본 구조 함수
  • mulitset mst multiset 기본 구조 함수
  • set(const set&st)복사 구조 함수
  • **set 할당 조작 함수 기능**
  • set&operator=(const set&st)재 부팅 등호 연산 자
  • swap(st)두 개의 집합 용기 교환
  • **set 크기 조작 함수 기능**
  • size()용기 에 있 는 원소 의 수 를 되 돌려 줍 니 다
  • empty()판단 용기 가 비어 있 음**set 삽입 및 삭제 조작 함수 기능**
  • insert(elem)용기 에 요소 삽입
  • clear()모든 요소 제거
  • erase(pos)는 pos 교체 기 가 가리 키 는 요 소 를 삭제 하고 다음 요소 의 교체 기
  • 를 되 돌려 줍 니 다.
  • erase(beg,end)구간[beg,end)의 모든 요 소 를 삭제 하고 다음 요소 의 교체 기
  • 를 되 돌려 줍 니 다.
  • erase(elem)용기 의 중간 값 이 elem 인 요 소 를 삭제 합 니 다
  • **set 찾기 조작 함수 기능**
  • find(key)키 가 존재 하 는 지 찾 습 니 다.존재 하면 이 키 의 요소 의 교체 기 를 되 돌려 줍 니 다.존재 하지 않 으 면 set.end()
  • 로 돌아 갑 니 다.
  • count(key)키 키 의 요소 갯 수 찾기
  • lower_bound(keyElem)마지막 key<=keyElem 요소 의 교체 기
  • 를 되 돌려 줍 니 다.
  • upper_bound(keyElem)첫 번 째 key>keyElem 요소 의 교체 기
  • 를 되 돌려 줍 니 다.
  • equal_range(keyElem)는 용기 에 있 는 key 와 keyElem 이 같은 상하 한 두 개의 교체 기 를 되 돌려 줍 니 다.이 두 개의 교체 기 는 그룹(pair)에 놓 여 있 습 니 다
  • .

    좋은 웹페이지 즐겨찾기