事实上,如果您可以vector
根据second
领域自由地对配对进行分类,您可以吃蛋糕并吃掉它。
在这种情况下,您最终会重新发明 Boost 所称flat_(multi_)map
的 . 明显的好处是搜索可以在 O(log(n)) 而不是线性时间中完成。
在Coliru现场观看
using namespace std;
#include <utility>
#include <vector>
#include <string>
#include <algorithm>
typedef std::pair<short, std::string> Pair;
struct Cmp
{
bool operator()(Pair const& a, Pair const& b) const { return a.second < b.second; };
bool operator()(Pair const& a, std::string const& b) const { return a.second < b; };
bool operator()(std::string const& a, Pair const& b) const { return a < b.second; };
};
int main()
{
std::vector<Pair> vec = {
{ 1, "aap" },
{ 2, "zus" },
{ 3, "broer" }
};
Cmp cmp;
std::sort(vec.begin(), vec.end(), cmp);
auto it = std::binary_search(vec.begin(), vec.end(), std::string("zus"), cmp);
std::cout << it->first << ": " << it->second << "\n";
}
印刷
2: zus
42: zus