【发布时间】:2015-05-01 21:37:31
【问题描述】:
首先,我定义了自己的内存分配器,MyAllocator。 然后我使用我自己的内存分配器基于 std::map 定义我自己的映射:
template <typename K, typename V, typename Comparator = std::less<K>>
using MyMap = std::map<K, V, Comparator, MyAllocatorAdapter<std::pair<const K, V>>>;
所以用法是:
MyMap<std::string, float> my_map(std::less<std::string>(), allocator);
my_map["key1"] = 10.1
my_map["key2"] = 10.2
my_map["key3"] = 10.3
MyMap 在这里完美运行,[]、内联函数、迭代器等,就像 std::map 一样。好!
然后我定义我自己的类型,MyString,它也可以完美运行。
class MyString{
...define operators[], =, !=, find(),substr(), etc
}
但是当我在 MyMap 中使用它作为 key 时,问题来了!
MyMap<MyString, float> my_map(std::less<MyString>(), allocator);
MyString my_string="key1";
[]、函数、迭代器等大多数函数都失败了!
我调试进程序发现在
`/user/include/c++/4.8/bits/stl_mpl.h`,
迭代器不动。 请注意,std::less 最终会调用 MyString 运算符!=,我会实现这个函数并且没有问题。 我被卡住并调试了2天!需要帮忙!谢谢!
【问题讨论】:
-
我不相信
std::less会“最终调用 MyString 运算符!=”,正如你所说。仅仅使用!=,怎么可能确定两个字符串中的哪一个less? -
阅读“严格弱排序”
-
我有实现