相关疑难解决方法(0)

什么是透明比较器?

在C++ 14中,关联容器似乎已从C++ 11改变 - [associative.reqmts]/13说:

成员函数模板find,count,lower_bound,upper_bound,并且equal_range不得,除非类型参与重载决议Compare::is_transparent存在.

使比较器"透明"的目的是什么?

C++ 14还提供了这样的库模板:

template <class T = void> struct less {
    constexpr bool operator()(const T& x, const T& y) const;
    typedef T first_argument_type;
    typedef T second_argument_type;
    typedef bool result_type;
};

template <> struct less<void> {
    template <class T, class U> auto operator()(T&& t, U&& u) const
    -> decltype(std::forward<T>(t) < std::forward<U>(u));
    typedef *unspecified* is_transparent;
};
Run Code Online (Sandbox Code Playgroud)

因此,例如,std::set<T, std::less<T>>不会有一个透明的比较,而是std::set<T, std::less<>> …

c++ c++-faq c++14

101
推荐指数
4
解决办法
2万
查看次数

如何避免const转换为地图访问?

我有以下问题:

std::map<A*,double> map;

void getColor(A const * obj){
    double d = map[obj]; // does not compile wihtout const_cast<A*>(obj)
    // do something
}
Run Code Online (Sandbox Code Playgroud)

我有一个地图std::map(某处)存储指向对象的指针A.我有一个操纵对象的函数getColor, 因此将指针 作为输入.Aconst A

如果getColor不使用const_cast ,函数将无法编译.

const cast是一个设计问题,但如果我不想map const中创建键,我不知道如何规避它.

任何帮助赞赏.

c++ stdmap c++11 c++14

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

标签 统计

c++ ×2

c++14 ×2

c++-faq ×1

c++11 ×1

stdmap ×1