【发布时间】:2011-05-13 08:05:47
【问题描述】:
std::map 必须满足第 23.1.2/2 段中指定的关联容器的要求:
每个关联容器都是 在 Key 和排序上参数化 导致严格的关系比较 元素的弱排序(25.3) 钥匙。此外,地图和多地图 将任意类型 T 与 钥匙。比较类型的对象是 称为a的比较对象 容器。这个比较对象可能 成为函数指针或对象 具有适当功能的类型 呼叫接线员。
但是在第 23.3.1/2 段中,std::map 模板被指定为:
template <class Key, class T, class Compare = less<Key>,
class Allocator = allocator<pair<const Key, T> > >
class map;
这似乎明确禁止将函数指针用作Compare。这是矛盾还是我没有正确理解标准?
编辑:是的,我真正遇到的问题是为什么像 GMan 的示例这样的代码:
struct foo
{
int x;
};
bool compare_foo(const foo& x, const foo& y)
{
return x.x < y.x;
}
std::map<foo, bool, compare_foo> fooMap;
不会编译(是的,我愚蠢地混淆了Compare 参数的类型和值)。
【问题讨论】:
-
如果您解释为什么您认为这以某种方式“明确禁止使用函数指针”,我们将能够更好地回答。
-
下一次,如果您只是学习使用该语言,也许不要去阅读规范。 Use a tutorial
标签: c++