@Superlokkus @jrok Я знаю этот пост около года поздно ... Еще предпочел бы, возможно, прояснить проблему. Существует проблема с MS Visual Studio, когда оператор сравнения перегружен. Дело в том, что есть две комбинации, которые не учитываются:
struct cmp {
bool operator()(const int& i, const std::pair<int, double>& p) const
{
return i < p.first;
}
bool operator()(const std::pair<int, double>& p, const int& i) const
{
return p.first < i;
}
bool operator()(const std::pair<int, double>& p1,
const std::pair<int, double>& p2) const
{
return p1.first < p2.first;
}
bool operator()(const int& i1, const int& i2) const
{
return i1 < i2;
}
};
, вставив последние два оператора мы вставляем все варианты, которые компилятор должен получить разницу. На самом деле, я рекомендую использовать вместо простого int
как представлено в первых двух операциях. Для небольших случаев это не имеет значения, но когда у нас действительно большие массивы пар, ints или даже хуже, действительно большие контейнеры, тогда операция будет связана с памятью, так как у нас будет много доступа к памяти. Используя это, мы передаем ссылку параметра и не нуждаемся в скопировании параметра, поэтому избегаем операции копирования и заполняем кеш другим набором значений, которые совершенно не нужны.
Как последнее примечание, я нахожу, что это довольно странно, что первое решение, предлагаемое @jrok, отлично компилируется в режиме деблокирования (MSVC 2013), а не в отладке. Было бы хорошо знать, почему!
Я не вижу здесь кода С. Почему тег 'c'? – 2013-03-22 20:51:46
Я не вижу никаких «карт» здесь. – jrok
@jrok пожалуйста, прочитайте вопрос еще раз .. H2CO3 извините за это. – glarkou