相关疑难解决方法(0)

C++标准中的矛盾?

A std::map必须满足第23.1.2/2段规定的关联容器的要求:

每个关联容器都在Key上进行参数化和一个排序关系比较,它对Key的元素产生严格的弱排序(25.3).此外,map和multimap将任意类型T与Key相关联.Compare类型的对象称为容器的比较对象.该比较对象可以是指向函数指针或具有适当函数调用操作符的类型的对象.

但是在第23.3.1/2段中,std::map模板被指定为:

template <class Key, class T, class Compare = less<Key>,
          class Allocator = allocator<pair<const Key, T> > >
class map;
Run Code Online (Sandbox Code Playgroud)

这似乎明确禁止使用函数指针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;
Run Code Online (Sandbox Code Playgroud)

不会编译(是的,我愚蠢地混淆了Compare参数的类型和值).

c++

2
推荐指数
2
解决办法
729
查看次数

标签 统计

c++ ×1