我们可以将集合的值存储在变量中吗?就像我们可以将数组的值存储在变量中一样

Can we store a value of a set in a variable? Like we can store a value of an array in a variable

本文关键字:存储 变量 我们 一样 集合 数组      更新时间:2023-10-16

我试图将集合的值存储到变量中。我试试这个:

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::setstd::map混淆了,后者确实有operator[]