Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 映射运算符[]操作数_C++_Map_Operands - Fatal编程技术网

C++ 映射运算符[]操作数

C++ 映射运算符[]操作数,c++,map,operands,C++,Map,Operands,大家好,我在一个成员函数中有以下内容 int tt = 6; vector<set<int>>& temp = m_egressCandidatesByDestAndOtMode[tt]; set<int>& egressCandidateStops = temp.at(dest); int tt=6; 向量和温度=m_egreesscandidatesbydestandotmode[tt]; 设置和退出CandidateStops=目的

大家好,我在一个成员函数中有以下内容

int tt = 6; 
vector<set<int>>& temp = m_egressCandidatesByDestAndOtMode[tt]; 
set<int>& egressCandidateStops = temp.at(dest);
int tt=6;
向量和温度=m_egreesscandidatesbydestandotmode[tt];
设置和退出CandidateStops=目的地温度;
以及以下成员变量的声明

map<int, vector<set<int>>> m_egressCandidatesByDestAndOtMode;
map m_egreesscandidatesbydestandotmode;
但是,编译时出错(英特尔编译器11.0)

1>C:\projects\svn\bdk\Source\ZenithAssignment\src\Iteration\PtBranchAndBoundIterationOriginRunner.cpp(85):错误:没有与这些操作数匹配的运算符“[]”
1> 操作数类型为:const std::map[const int]
1> 向量和温度=m_egreesscandidatesbydestandotmode[tt];
1>                                                                    ^
我知道这一定很愚蠢,但我看不出我做错了什么

UPDATE我从一个const成员函数调用这个函数,这就是为什么成员变量的类型是const,所以我认为应该用下面类似的方法来修复它:

int dest = 0, tt = 6; 
const set<int>& egressCandidateStops = m_egressCandidatesByDestAndOtMode[tt].at(dest); 
int dest=0,tt=6;
const set&egreesscandidatestops=m_egreesscandidatesbydestandotmode[tt].at(dest);
但是没有骰子。。。还是一样的错误

操作数类型为:常量std::map
map::operator[]
不能使用
常量map

我几天前就知道了

操作符[]有点奇怪。信息技术 这是否:

  • 找钥匙
  • 如果找到,请退回
  • 如果不是,则插入它并默认构造其关联的 价值观
  • 然后返回对新值的引用
  • 步骤3与constanness不兼容。 而不是有两个 功能不同的运算符[] 重载时,语言会强制您 对常量对象使用map::find


    []
    的原型是

     data_type& operator[](const key_type& k)
    
    i、 非常量操作,因此不能从常量成员函数中对成员调用它

    您可以将代码更改为:

    std::map<...>::const_iterator where = m_egressCandidatesByDestAndOtMode.find(tt);
    if (egressCandidatesByDestAndOtMode.end() != where) {
        const vector<set<int>>& temp = where->second;
    }
    
    std::map::const_迭代器,其中=m_egrescandidatesbydestandotmode.find(tt);
    if(egreesscandidatesbydestandotmode.end()!=其中){
    常量向量和温度=其中->秒;
    }
    
    就是这样!!我会在七分钟内记下答案,不知道为什么我还不能。。。如果答案是正确的,那么它就是正确的:)现在可能值得一提
    std::map::at
    。Potatoswatter的答案是正确的。为了避免您的问题,您需要使用find。
    std::map<...>::const_iterator where = m_egressCandidatesByDestAndOtMode.find(tt);
    if (egressCandidatesByDestAndOtMode.end() != where) {
        const vector<set<int>>& temp = where->second;
    }