gpt4 book ai didi

c++ - 为什么 std::distance 会出现在 STL map 中?

转载 作者:行者123 更新时间:2023-12-04 14:35:15 25 4
gpt4 key购买 nike

我想使用 std::distance 来查找元素的索引。
这是代码:

#include <iostream>
#include <map>
#include <iterator>
#include <string>
using namespace std;

int main() {
std::map<int, std::string> m = {{1, "huang"}, {2, "wei"}, {3, "pu"}};
auto it = m.find(2);
cout << std::distance(it, m.begin()) << endl; // struck here
cout << std::distance(it, m.end()) << endl;
}
但我发现代码在 cout 中被击中,我的代码有什么问题?

最佳答案

问题出在std::distance(first, last) ...

Returns the number of hops from first to last - cppreference.com


所以你需要改成这样:
// ...   
std::distance(m.begin(), it); // the number of hops from m.begin() to it
// ...
请注意,我们以这种方式呈现 distance有效 迭代器范围 .对形成迭代器范围的迭代器有要求:
  • 他们必须引用元素(或最后一个元素之后的元素)
    同一个容器
  • 可以联系到end通过重复递增 begin .在
    换句话说,end不得在 begin 之前.

  • 在您的情况下违反了第二个要求。

    关于c++ - 为什么 std::distance 会出现在 STL map 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68110706/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com