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