是否可以在C STL中获得集合的单个元素
Is it possible to get a single element of a set in C++ STL?
i具有以下C 代码,带有C STL Vector,
#include <iostream>
#include <vector>
using namespace std;
int main ()
{
vector <int> v;
for (int i=0; i<15; i++)
v.push_back (i);
cout << v[10] << endl;
return 0;
}
它通常打印存储在第10个索引中的元素。输出为10。
,但我也尝试了C STL设置的同一件事,
#include <iostream>
#include <set>
using namespace std;
int main ()
{
set <int> myset;
for (int i=0; i<15; i++)
myset.insert (i);
cout << myset[10] << endl;
return 0;
}
它给我的汇编错误显示以下消息:(
prog.cpp:在函数'int main(('中:
prog.cpp:12:18:错误:"操作员[]"无匹配(操作数类型为 " std :: set"answers" int"( cout&lt;&lt;myset [10]&lt;&lt;endl;
所以,我的问题是,是否有任何方法可以打印任何C 中的STL向量的STL集合?如果是,如何?
同时,我们可以使用迭代器,但我知道,它可以与完整组合使用。:(
是的,这是可能的,但不使用 operator[]
。
std::set
不提供operator[]
,因为它不是随机访问容器。相反,必须使用迭代器访问其元素。
auto first = myset.begin(); // get iterator to 1st element
std::advance(first, 9); // advance by 9
std::cout << *first; // 10th element
请注意,std::set
是一个有序的容器,这些元素不会以您插入它们的顺序出现。
您无法通过索引访问设置元素。但是,您可以在迭代器上使用std::advance
。
set<int>::iterator it = myset.begin();
std::advance(it, 5); // advanced by five
std::next
也在 C++11
中,
auto it = std::next(myset.begin(), 5);
此处解释了这两个版本之间的区别:STD :: Advance和STD :: Next有什么区别?
问题是集合无法通过索引访问。但是您仍然可以做类似的事情:
set<int>::iterator myIterator = myset.begin();
advance(myIterator , 9);
int theTenth= *myIterator;
基本上是得到一个互动器,然后"移动"向前9个位置...
您不能在Clear C 中进行此操作,但是如果您使用GCC(并且您可能会根据汇编错误进行(,则可以创建基于策略的集合,其行为正常STL设置,但支持您询问的操作。
#include <iostream>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> indexed_int_set;
int main ()
{
indexed_int_set myset;
for (int i=0; i<15; i++)
myset.insert (i);
cout << *myset.find_by_order(10) << endl;
return 0;
}
在上面的代码中,我们定义了称为indexed_int_set
的结构,该结构具有2种其他方法:find_by_order(int p)
和order_of_key(int k)
。第一个是您想要的,它将迭代器返回到p-th元素。第二个类似于lower_bound,但返回索引而不是迭代器。
- 处理多个异常集合的C++方法
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- 如何将ampl中的集合表示为c++中的向量
- 检查值是否在集合p1和p2中,但不在p3中
- 带过滤器的现代迭代c++集合
- 如何将结构插入到集合中并打印集合的成员
- 集合上的输出迭代器:assign和increment迭代器
- 如何将函数集合传递给客户端类,以便将它们当作客户端类本身的成员使用
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 实现一个在集合上迭代的模板函数
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 尝试使用集合函数时出现分段错误
- 互斥指针的集合
- c++找不到具有相同哈希的无序集合元素
- python集合的C++等价物是什么.计数器
- 如何在C++中递归地按相反顺序打印集合
- 是否可以在C STL中获得集合的单个元素
- 如何将一对元素作为单个元素插入到集合容器中
- 具有单个成员的自定义结构(包装器)的集合(也是自定义结构)到单个成员的集合
- 将单个整数集合解析为浮点数