【发布时间】:2020-11-08 00:28:37
【问题描述】:
c++中的set stl可以减去迭代器吗?就像在矢量中是可能的......
int32_t main()
{
set<int> s = {1, 3, 0, 23};
vector<int> v = {1, 3, 0, 23};
int vind = find(v.begin(), v.end(), 1) - v.begin(); //This is ok with no error
int sind = find(s.begin(), s.end(), 1) - s.begin(); //But this gives error
cout<<vind <<" " << sind;
return 0;
}
我无法弄清楚原因。为什么在set里不行??
【问题讨论】:
-
因为给定集合迭代器的本质,减法不能有效地实现。您可以使用 std::distance 函数。
sind = std::distance(find(s.begin(), s.end(), 1), s.begin());但请注意,调用此函数所花费的时间与返回的索引成正比。换句话说,它是线性时间运算,而不是恒定时间运算。 -
@Evg 谢谢我在不得不使用该功能的少数场合犯了同样的错误。