set 跟 map 容器很像,但它俩又有很大的不同,它们的底层实现都是树,元素都是有序的,但map是可以修改元素的,而 set 就不行了,set 里的元素只有删除的情况,没有修改的情况;所以发现没有? set 是没有 operator[] 操作的。文章来源:https://www.toymoban.com/news/detail-852101.html
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <set>
int main ()
{
std::set<int> myset;
std::set<int>::iterator it;
std::pair<std::set<int>::iterator,bool> ret;
// set some initial values:
for (int i = 1; i <= 5; ++i)
{
// set: 10 20 30 40 50
myset.insert(i*10);
}
ret = myset.insert(20); // no new element inserted
if (!ret.second)
{
it = ret.first; // "it" now points to element 20
std::cout << "insert failed!\n" << *it << "\n";
}
myset.insert(it, 25); // max efficiency inserting
myset.insert(it, 24); // max efficiency inserting
myset.insert(it, 26); // no max efficiency inserting
int myints[] = {5, 10, 15}; // 10 already in set, not inserted, 5 and 15 insert success
myset.insert(myints, myints + 3);
for (it = myset.begin(); it != myset.end(); ++it)
{
std::cout << ' ' << *it;
}
std::cout << '\n';
myset.erase(50);
for (it = myset.begin(); it != myset.end(); ++it)
{
std::cout << ' ' << *it;
}
std::cout << '\n';
return 0;
}
因为 set 里的元素是有序的,所以跟 map 一样,如果元素是自定义类型的,必须实现 operator <文章来源地址https://www.toymoban.com/news/detail-852101.html
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <set>
struct objectKey
{
int ldp_oidx;
int lsp_oidx;
bool operator<(const objectKey &key) const
{
return ldp_oidx > key.ldp_oidx;
}
};
int main ()
{
std::set<objectKey> objSet;
std::set<objectKey>::iterator itKey;
objectKey key = {0, 1};
objectKey key2 = {1, 2};
objectKey key3 = {2, 3};
objSet.insert(key);
objSet.insert(key2);
objSet.insert(key3);
for(itKey = objSet.begin(); itKey != objSet.end(); ++itKey)
{
printf("%d, %d\n", (*itKey).ldp_oidx, (*itKey).lsp_oidx);
}
return 0;
}
到了这里,关于stl set 的 insert()的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!