Следующая C++ 11 кода показано, как это сделать так:
#include <vector>
#include <map>
int main()
{
std::vector<double> price{0.3, 0.2, 0.1};
auto cmp = [&price](int i, int j){return price[i] < price[j];};
std::map<int, float, decltype(cmp)> m(cmp);
m[2] = 'b';
m[1] = 'c';
}
Линия
std::vector<double> price{0.3, 0.2, 0.1};
определяет вектор price
.
Линия
auto cmp = [&price](int i, int j){return price[i] < price[j];};
создает функцию лямбда, которая захватывает price
по ссылке.
Линия
std::map<int, float, decltype(cmp)> m(cmp);
создает контейнер (в данном случае std::map
) спараметрированного этого типа, а также принимает объект в качестве компаратора. Использование этого с другим контейнером будет аналогичным.
Что такое 'цена'? –
Например, вектор удвоений, индексируемый по int, определенный в том же классе, в котором используется куча. – danatel