天天看點

C++:STL常用函數子產品總結(set)

Set

Sets是一個儲存元素的容器,其中每個元素最多隻出現一次,元素的遵循一個特定的順序。元素一旦被放入次容器将不能被修改(修改元素的值),但是可以對元素進行插入和移除操作。Set内部的元素遵循嚴格弱排序,是以在尋找元素的時候比unordered_map稍微慢一些,但是可以直接通過指針操作子分組,set是一個典型的二分搜尋樹的應用。

定義程式

#include <iostream>
#include <set>

bool fncomp (int lhs, int rhs) {return lhs<rhs;}

struct classcomp {
  bool operator() (const int& lhs, const int& rhs) const
  {return lhs<rhs;}
};

int main ()
{
  std::set<int> first;                           // int型空set集合

  int myints[]= {10,20,30,40,50};
  std::set<int> second (myints,myints+5);        // 範圍

  std::set<int> third (second);                  // 複制second

  std::set<int> fourth (second.begin(), second.end());  // iterator ctor.

  std::set<int,classcomp> fifth;                 // 比較類

  bool(*fn_pt)(int,int) = fncomp;
  std::set<int,bool(*)(int,int)> sixth (fn_pt);  // 比較函數指針

  return 0;
}           

基本操作

1、

set::size

:傳回容器中的元素數量

#include <iostream>
#include <set>

int main ()
{
  std::set<int> myints;
  std::cout << "0. size: " << myints.size() << '\n';

  for (int i=0; i<10; ++i) myints.insert(i);
  std::cout << "1. size: " << myints.size() << '\n';

  myints.insert (100);
  std::cout << "2. size: " << myints.size() << '\n';

  myints.erase(5);
  std::cout << "3. size: " << myints.size() << '\n';

  return 0;
}           

output:

0. size: 0
1. size: 10
2. size: 11
3. size: 10           

2、

set::empty

:判斷容器中元素數量是否為空(空則傳回1)

3、

set::begin

:傳回指向容器第一個元素的指針(如果元素為空,則傳回不能被引用的空指針),遵循特定的排序順序

4、

set::end

:原則上傳回容器假設的“最後一個值的指針”,但是其傳回的指針并不能被引用,一般與begin搭配使用用來表示特定的範圍

#include <iostream>
#include <set>

int main ()
{
  int myints[] = {75,23,65,42,13};
  std::set<int> myset (myints,myints+5);

  std::cout << "myset contains:";
  for (std::set<int>::iterator it=myset.begin(); it!=myset.end(); ++it)
    std::cout << ' ' << *it;

  std::cout << '\n';

  return 0;
}           
myset contains: 13 23 42 65 75
           

繼續閱讀