我们可以将集合的值存储在变量中吗?就像我们可以将数组的值存储在变量中一样
Can we store a value of a set in a variable? Like we can store a value of an array in a variable
我试图将集合的值存储到变量中。我试试这个:
int a[1000],c[1000],ara[10000],t,n,i,j;
cin>>n;
set<int>st;
for(i=0; i<n; i++)
{
cin>>a[i];
st.insert(a[i]);
}
int p = st.size();
int m;
for(i=0;i<p;i++)
m = st[i];
错误:与"运算符 []"不匹配(操作数类型为"std::set
"和"int"(
std::set
不像数组那样有operator[]
。您正在尝试循环访问存储在set
中的值。您可以使用迭代器执行此操作,例如:
int n, j;
cin >> n;
set<int> st;
for(int i = 0; i < n; ++i)
{
cin >> j;
st.insert(j);
}
for(set<int>::iterator iter = st.begin(); iter != st.end(); ++iter)
{
int m = *iter;
// use m as needed...
}
/* simpler:
for(int m : st)
{
// use m as needed...
}
*/
std::set
不支持通过索引或键访问元素的概念。它的行为更像是一个数学集。这就是为什么它不会重载operator[]
并且您无法访问它的元素,例如数组、矢量或映射的元素。
但是,您可以使用迭代器循环访问std::set
的元素:
for(auto it = st.begin(), end = st.end(); it != end; ++it) {
m = *it;
}
或者让编译器使用基于范围的 for 做所有令人讨厌的事情:
for(int item : st) {
m = item;
}
当您遇到此类编译器错误时,表明您使用了错误的stl
容器、算法等,您可以在 cppreference.com 轻松查找它。下面是一个 set 的示例。您将看到没有operator[]
std::set
,因此编译器错误。此外,在您的第一个for
中,您使用st1
而不是st
。
您似乎想遍历std::set
.您可以通过多种方式执行此操作,其中一种是:
std::set<int> mySet;
/* ... */
for (const auto& element : mySet)
{ /* ... */ }
请注意,在第二个循环中,您只需将std::set
的最大int
存储在变量m
中。
您可能将std::set
与std::map
混淆了,后者确实有operator[]
。
相关文章:
- 存储变量的更有效方法是什么?
- 使用 system() 不存储变量C++?
- 在递归DP中,通过存储变量来分解递归调用:效率低下
- 使用 LDAP 存储C++变量
- 在满足特定条件时运行迭代C++以存储变量
- 使用getline解析和存储变量
- 如何存储变量的地址并使用指针打印值
- C++ / Objective-C++ - 如何在 NSDictionary 中存储C++变量?
- 如何从文件中读取并存储变量
- 指针是否延长了自动存储变量的生存期
- 如何在 INI、CFG 或 XML 文件中存储C++变量
- 如何在 c++ 中的字符串数组中存储变量
- 如何在特定偏移量处存储变量
- 如何存储变量的前一个值并更新它以进行比较
- 存储变量的有效方法是什么?(自制虚拟机)
- 在C++中存储变量
- 在c++中按值调用时,存储变量的副本
- 为什么lambda只捕获自动存储变量
- 如何在寄存器中存储c++变量
- Getline()结合cin.ignore()不存储变量?(错误)