1. 程式人生 > >C++中 set 基本方法

C++中 set 基本方法

set 集合

常用方法:

方法功能
insert插入一個元素

erase

刪除一個元素
count判斷元素是否在set中
size獲取元素大小
clear清空

set具有和數學中“集合”類似的屬性,set由不重複的資料組成,插入、查詢、刪除、和查詢的時間複雜度都為O(lgn).而陣列雖然插入的時間複雜度為O(1),但刪除、查詢都為O(n),時間效率低。

初始化一個集合

C++中直接構造一個set的語句為:

set<T> s;//定義一個儲存T型別、名為s的集合,初始時s為空

插入元素

#include <set>
#include<string>
#include<iostream>
using namespace std;
int main() {
    set<string> fruits;
    fruits.insert("apple");
    fruits.insert("apple");
    fruits.insert("banana");
    fruits.insert("mango");
    for(set<string>::iterator it = fruits.begin();
     it != fruits.end(); it++){
        cout << *it << endl;
    }
    return 0;
}

注意到上邊的程式碼裡有兩個fruits.insert("apple");那麼此時集合裡的元素都有什麼呢?

C++用insert()方法向集合中插入一個新的元素.如果集合中已經存在了這個元素,再次插入不會產生任何效果,集合中不會出現重複元素

刪除元素

#include <set>
#include<string>
#include<iostream>
using namespace std;
int main() {
    set<string> fruits;
    fruits.insert("apple");
    fruits.insert("banana");
    fruits.insert("mango");
    fruits.erase("apple");
    fruits.erase("banana");
    fruits.erase("orange");
    for(set<string>::iterator it = fruits.begin();
     it != fruits.end(); it++){
        cout << *it << endl;
    }
    return 0;
}

c++中通過erase()方法刪除集合中一個元素,如果集合中不存在這個元素,則不進行任何操作

查詢元素

#include <set>
#include<string>
#include<iostream>
using namespace std;
int main() {
    set<string> fruits;
    fruits.insert("apple");
    fruits.insert("banana");
    fruits.insert("mango");
    if(fruits.count("apple")){
        cout << "We have apple!" << endl;
    }
    return 0;
}

count()方法可以查詢一個元素是否在集合中,如果存在返回 1,否則返回 0

遍歷元素

#include <set>
#include<string>
#include<iostream>
using namespace std;
int main() {
    set<string> fruits;
    fruits.insert("apple");
    fruits.insert("banana");
    fruits.insert("mango");
    for(set<string>::iterator it = fruits.begin();
     it != fruits.end(); it++){
        cout << *it << endl;
    }
    return 0;
}

通過迭代器可以訪問集合中每一個元素,C++標準庫容器都可以使用迭代器,但是其中只有少數幾種支援下標運算子,如果你還不太理解迭代器,那就把它想成指標吧

清空

C++中只需要呼叫clear()方法就可以清空set

fruits.clear();

注意用clear()清空set並不會釋放其再計算機中開闢的記憶體,如果想釋放set的記憶體,把一個空set賦給它就好了