set容器

set容器

集合(Set)是一種包含已排序對象的關聯容器

基本介紹

  • 中文名:set容器
  • 外文名:set container
  • 屬性:關聯容器
  • 出自:C++標準庫
簡介,特性,添加元素,獲取元素,

簡介

set是C++標準庫中的一種關聯容器。所謂關聯容器就是通過鍵(key)來讀取和修改元素。與map關聯容器不同,它只是單純鍵的集合。

特性

set容器的每一個鍵只能對應一個元素,即不存在鍵相同的不同元素。
示例代碼:
#include <iostream>
#include <set>
#include <vector>
int main(int argc, char* argv[]) {
std::vector<int>vec;
for(std::vector<int>::size_type i = 0; i < 10; ++i) {
vec.push_back(i);
vec.push_back(i);
}
std::cout<< "vector : " << std::endl;
for(std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
std::cout<< *it << ",";
}
std::cout<< std::endl;
std::set<int>st(vec.begin(), vec.end());
std::cout<< "set : " << std::endl;
for(std::set<int>::iterator it = st.begin(); it != st.end(); ++it) {
std::cout<< *it << ",";
}
std::cout<< std::endl;
return 0;
}
輸出結果:
vector :
0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9
set :
0,1,2,3,4,5,6,7,8,9
創建了一個int型的vector容器,存儲20個數據,0~9每個數字都出現了兩次。用整個vector初始化一個int型set容器,這個set容器卻只有10個元素,0~9每個數字只出現一次。證實了set容器的每一個鍵只能對應一個元素。

添加元素

可以使用insert操作向set容器添加元素。
示例代碼:
#include <iostream>
#include <set>
#include <vector>
int main(int argc, char* argv[]) {
std::vector<int>vec;
vec.push_back(1);
vec.push_back(2);
std::set<int>st;
st.insert(10);
st.insert(vec.begin(),vec.end());
std::cout<< "set : ";
for(std::set<int>::iterator it = st.begin(); it != st.end(); ++it) {
std::cout<< *it << " ";
}
std::cout<< std::endl;
return 0;
}
輸出結果:
set : 1 2 10
insert()的參數既可以是一個鍵,也可以是一對疊代器,它們都可以實現向set容器中添加元素,只不過函式的返回值不同。另外,可以看出向set容器中添加元素後,它會自動排序。

獲取元素

與map容器不同,set容器不支持下標操作訪問元素。
使用count()函式可以查詢元素是否存在,如果查詢的元素存在則返回1,反之則0。使用find()函式,如果查詢的元素存在則返回指向該元素的疊代器,反之則返回超出末端疊代器。
示例代碼:
#include <iostream>
#include <set>
int main(int argc, char* argv[]) {
std::set<int> st;
st.insert(1);
st.insert(5);
st.insert(10);
std::cout<< "count(5) : " << st.count(5) << std::endl;
std::cout<< "find(5): " << *st.find(5) << std::endl;
return 0;
}
輸出結果:
count(5) : 1
find(5): 5
使用count()和find()函式查詢同一元素5,count()函式返回的是該元素在set容器中的數量,find()函式則返回指向該元素的疊代器。需要注意的是,雖然使用find()函式可以返回指向該元素的疊代器,但只能對其做讀操作,任何試圖修改鍵值的操作都是非法的。

相關詞條

熱門詞條

聯絡我們