【发布时间】:2014-04-13 00:58:05
【问题描述】:
我正在尝试使用自定义比较器构建地图,但是,我无法弄清楚的事情出错了,无法将项目添加到地图(具体来说,只能添加第一项)
struct byKey
{
bool operator () ( const Key &key1, const Key &key2) const {
return key1.keytoInt() < key2.keytoInt();
}
};
其中 Key 类有一个私有 char[5],比如
char[0]=1, char[1]=2, char[3]=13, char[4]=20, char[5]=28
有一个匹配去确保char digit[5]中的所有字符(小于32)并且可以转换为字符。如char=0,它会搜索一个表,找到一个字符喜欢A
我使用Key中的一个方法将其转换为int,然后与int进行比较
int Key :: keytoInt() const{
int sum;
sum=atoi(digit);
return sum;
}
我用键和值都作为键类型构建了一个映射表,但是,当尝试对其进行测试时,我无法将项目添加到表中,我不确定哪里出错了。
没有编译错误,但是,从逻辑上讲,即使我在地图中插入了 3 次,map.size() 显示只有一个
map<Key,Key,byKey> firstmap;
map<Key,Key>::iterator it;
firstmap.insert(pair<Key,Key>(base,stepguess));
firstmap.insert(pair<Key,Key>(stepguess,base));
firstmap[stepguess]=base;
cout << "wait";
cout << "mymap.size() is " << firstmap.size() << '\n';
【问题讨论】:
-
@avarookie 请用文字描述函数 keytoInt 必须做什么。
-
'我不知道哪里出了问题。'到底哪里出了问题?编译错误,意外行为?请编辑您的问题以提供此信息。
-
你为什么不为你的 Key 类重载 operator
-
看来关键特征必须重新考虑一遍。到目前为止描述的行为意味着使用
std::string作为映射键。无需再调用atoi,struct byKey就会消失。另请记住,地图可以通过在地图实例声明的第三个参数中使用less <T>或greater<T>以升序或降序排序。