相关疑难解决方法(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万
查看次数

没有Boost的现代C++中的bimap实现

我承认这个问题在之前已经被问到,但是现在是4年前,我敢于要求更新:

我需要一种方法来将一个元组/对添加到容器中并有效地搜索左侧和右侧元素.

升压具有bimapmulti_index该做的正是我想要的,但我不知道什么是纯现代C++推荐的替代方案- 11/14如果你不希望引入的依赖性提高(无论何种原因).

链接中的一个答案表明不需要s.th. 由于透明的比较器,更像是一个bimap .接受的答案表明将std::maps与key1- > key2key2- > 组合在一起的实现key1.

我真的不知道透明比较器如何帮助我,我只是好奇是否有一些这是你应该怎么做以及为什么 - 解决方案.你能提供一些提示/链接吗?

c++ boost bimap c++11 c++14

6
推荐指数
1
解决办法
1955
查看次数

如何确定地图是否包含给定值?

我想知道地图中是否存在给定值.获得相应的密钥也不错,但不是必需的.

bool map::contains(string value);
Run Code Online (Sandbox Code Playgroud)

除了迭代整个地图并将每个值与给定值进行比较之外,还有一种简单的方法吗?为什么STL中没有相应的方法?

c++ dictionary stl

1
推荐指数
1
解决办法
242
查看次数

标签 统计

c++ ×3

c++14 ×2

bimap ×1

boost ×1

c++-faq ×1

c++11 ×1

dictionary ×1

stl ×1