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

时间:2020-01-29 07:32:48

标签: c++ stl

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

.coverage

错误:“ operator []”不匹配(操作数类型为“ std :: set ”和“ int”)

3 个答案:

答案 0 :(得分:2)

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...
}
*/

答案 1 :(得分:1)

function getDate(dt) { return new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()) } const onChange = dt => { setD(dt); setUrl(`${baseUrl}api/patient/list?date=${getDate(dt)}`); }; 不支持通过索引或键访问元素的概念。它的行为更像是数学集合。这就是为什么它不会重载std::set的原因,并且您无法访问它的元素,例如数组,向量或映射。

但是,您可以使用迭代器遍历operator[]的元素:

std::set

或者让编译器使用基于范围的以下项来处理所有令人讨厌的事情:

for(auto it = st.begin(), end = st.end(); it != end; ++it) {
    m = *it;
}

答案 2 :(得分:0)

遇到此类编译器错误时,表明您在使用错误的stl容器,算法...时,可以在cppreference.com上轻松查找它。这是set的示例。您会看到operator[]中没有std::set,因此出现了编译器错误。另外,在您的第一个for循环中,您使用st1而不是st

您似乎想遍历std::set。您可以通过多种方式执行此操作,一种是:

std::set<int> mySet;
/* ... */
for (const auto& element : mySet)
{ /* ... */ }

请注意,尽管在第二个循环中,您只会将int中最大的std::set存储在变量m中。

您可能将std::setstd::map混淆了,后者确实具有operator[]