【问题标题】:How to assign starting address to an interator of a map<pair<long long int,long long int>,long long int >如何将起始地址分配给映射的迭代器<pair<long long int,long long int>,long long int >
【发布时间】:2016-03-18 02:44:36
【问题描述】:

我创建了一对和 long long int 的映射 -

map< pair< long long int, long long int >,long long int >; 

和一个交互者 -

map< pair< long long int, long long int >, long long int >::iterator it1;

当我执行it1=same.begin() 时,编译器抛出错误,为什么会这样?

产生错误:

no viable overloaded '=' 
it1=same12.begin();
~~~^~~~~~~~~~~~~~~

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/map:648:29: 注意:候选函数 (隐式复制赋值运算符)不可行:没有已知的转换 '__map_iterator<__tree_iterator>, __node_pointer, [...]>>' to 'const __map_iterator<__tree_iterator>, std::__1::__tree_node, long long>, void *> *, [...]>>' 用于第一个参数 类 _LIBCPP_TYPE_VIS_ONLY __map_iterator

【问题讨论】:

  • 错误是什么?
  • 错误:没有可行的重载 '=' it1=same.begin(); ~~~^~~~~~~~~~~~~~~~
  • 您应该提供minimal reproducible example
  • 另外,如果您没有输入代码,实际上是在您的帖子中复制并粘贴您正在编译的代码,这会有所帮助。原因是这一行:map&lt; pair&lt; long long int, long long int &gt;,long long int &gt; &gt; same 有太多&gt;(除非这是错误)。

标签: c++ dictionary stl std-pair


【解决方案1】:

错误告诉你:

没有从'__map_iterator&lt;...&gt;''const __map_iterator&lt;_...&gt;' 的已知转换

注意const

在这里,看起来same12const map(或const map&amp;,或者它可能在const 方法中使用,在这种情况下正在应用常量正确性)。这意味着.begin() will return const_iterator,而不是iterator

您需要将it1 的类型更改为const_iterator 而不是iterator。完整类型应为:map&lt;pair&lt;long long int, long long int&gt;, long long int&gt;::const_iterator

或者只使用auto it1 = same12.begin();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    相关资源
    最近更新 更多