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::mapmap::operator[]
不能使用常量map
我几天前就知道了
操作符[]有点奇怪。信息技术
这是否:
[]
的原型是
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;
}