我试图将集合的值存储到变量中。我尝试这个:
.coverage
错误:“ operator []”不匹配(操作数类型为“ std :: set
”和“ int”)
答案 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::set
与std::map
混淆了,后者确实具有operator[]
。