У меня была та же проблема 27 сентября 2019.
Мой API находится в Предназначении ядра сети Dot к платформе .NET. edmx находится в другой библиотеке классов, которая находится в платформе .NET только.
я заметил это, когда я пытаюсь назвать это edmx от API.. по некоторым причинам я получил ту ошибку.
то, Что я сделал, перейдите к obj папке API и удалите все. тогда уберите проект API и попробуйте еще раз, и это работало на меня.
Простой пример с использованием std :: sort
struct MyStruct
{
int key;
std::string stringValue;
MyStruct(int k, const std::string& s) : key(k), stringValue(s) {}
};
struct less_than_key
{
inline bool operator() (const MyStruct& struct1, const MyStruct& struct2)
{
return (struct1.key < struct2.key);
}
};
std::vector < MyStruct > vec;
vec.push_back(MyStruct(4, "test"));
vec.push_back(MyStruct(3, "a"));
vec.push_back(MyStruct(2, "is"));
vec.push_back(MyStruct(1, "this"));
std::sort(vec.begin(), vec.end(), less_than_key());
Редактировать: Как указал Кирилл В. Лядвинский, вместо предоставления предиката сортировки вы можете реализовать оператор <
для MyStruct
:
struct MyStruct
{
int key;
std::string stringValue;
MyStruct(int k, const std::string& s) : key(k), stringValue(s) {}
bool operator < (const MyStruct& str) const
{
return (key < str.key);
}
};
Использование этого метода означает, что вы можете просто отсортировать вектор следующим образом:
std::sort(vec.begin(), vec.end());
Edit2: Как предлагает Каппа, вы также можете отсортировать вектор в порядке убывания, перегрузив оператор >
и немного изменив вызов сортировки:
struct MyStruct
{
int key;
std::string stringValue;
MyStruct(int k, const std::string& s) : key(k), stringValue(s) {}
bool operator > (const MyStruct& str) const
{
return (key > str.key);
}
};
И вы должны вызвать сортировать как:
std::sort(vec.begin(), vec.end(),greater<MyStruct>());
Функтор можно использовать как третий аргумент std :: sort
, или вы можете определить operator <
в своем классе.
struct X {
int x;
bool operator<( const X& val ) const {
return x < val.x;
}
};
struct Xgreater
{
bool operator()( const X& lx, const X& rx ) const {
return lx.x < rx.x;
}
};
int main () {
std::vector<X> my_vec;
// use X::operator< by default
std::sort( my_vec.begin(), my_vec.end() );
// use functor
std::sort( my_vec.begin(), my_vec.end(), Xgreater() );
}
Вы на правильном пути. std :: sort
будет использовать operator <
в качестве функции сравнения по умолчанию. Итак, чтобы отсортировать ваши объекты, вам придется либо перегрузить bool operator <(const T &, const T &)
, либо предоставить функтор, который выполняет сравнение, примерно так:
struct C {
int i;
static bool before( const C& c1, const C& c2 ) { return c1.i < c2.i; }
};
bool operator<( const C& c1, const C& c2 ) { return c1.i > c2.i; }
std::vector<C> values;
std::sort( values.begin(), values.end() ); // uses operator<
std::sort( values.begin(), values.end(), C::before );
Преимущество Использование функтора заключается в том, что вы можете использовать функцию с доступом к закрытым членам класса.
Да, std :: sort ()
с третьим параметром (функцией или объектом) было бы проще. Пример:
http://www.cplusplus.com/reference/algorithm/sort/
В своем классе вы можете перегрузить оператор «<».
class MyClass
{
bool operator <(const MyClass& rhs)
{
return this->key < rhs.key;
}
}