Я читал this вопрос, и это мне не помогает.Использование функции сравнения для типа ключа для наборов приводит к ошибке во время выполнения
Мой вопрос: Почему я получаю ошибку времени выполнения при использовании функции сравнения для типа ключа для set
, как показано ниже?
multiset<Phone, decltype(comp)*> phones { Phone(911), Phone(112) };
//^^^^^^^^^^^^^^^
В VC2013 это дает мне это для приведенного выше кода:
Unhandled exception at 0x73DECB49 in debugit.exe: 0xC0000005: Access violation executing location 0x00000000.
Вот небольшой пример, который дает ошибку:
#include <iostream>
#include <algorithm>
#include <string>
#include <set>
using namespace std;
struct Phone {
Phone(long long const &num) : number{num} {}
long long number;
};
// compare function:
bool comp(Phone const &n1, Phone const &n2) { return n1.number < n2.number; }
int main()
{ // The below line produces the runtime error.
multiset<Phone, decltype(comp)*> phones { Phone(911), Phone(112) };
}
Я не могу видеть, что я я делаю неправильно здесь. Я скомпилирован с VC2013 и g ++ (GCC) 4.9.1, и оба результата совпадают.
возможно дубликат [Инициализация мультимножество с пользовательской функцией сравнения в C++] (http://stackoverflow.com/questions/18718379/initializing-multiset-with-custom-compare-function-in-c) – NathanOliver
Вам нужно предоставить экземпляр 'decltype (comp) *'. Например. 'phones ({...}, & comp)'. –
Не используйте целые числа для отображения номеров телефонов. Это не помогло бы мне (и большинству номеров в моей стране). –