Моя цель - сделать простую функцию, которая будет вставлять объекты в вектор, сохраняя их в алфавитном порядке, чтобы я мог позже легко искать в векторе.
Это мой упрощенный пример:
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
class Names {
public:
Names(void);
~Names(void);
bool Insert(const string & namer);
private:
struct Person {
string name;
};
vector<Person>people;
};
Names::Names() {
};
Names::~Names() {
};
bool Names::Insert(const string& namer) {
Person p;
p.name = namer;
people.insert(upper_bound(people.begin(), people.end(), p), p);
}
int main(int argc, char** argv) {
Names b1;
bool status;
status = b1 . Insert("John Smith");
status = b1 . Insert("Bat Man");
status = b1 . Insert("A Aron");
return 0;
}
Это не работает, вероятно, потому что функция upper_bound не может сравнивать строку. Может ли кто-нибудь помочь мне, как правильно использовать функцию вставки для вставки в нужное место?
Спасибо за любую помощь.
Редактировать:
Моя проблема в том, что мое решение не работает из-за проблем с компиляцией, и я хотел бы узнать, почему.
2 ответа
Вы должны определить operator <
для класса Person. Например, это может быть функция-член класса
struct Person {
bool operator <( const pserson &rhs ) const { return ( name < rhs.name ); }
string name;
};
Да, вы можете использовать std::sort
.
Принимает три аргумента,
Sort(your_vector.begin(),your_vector.end(),predicate)
Вы можете определить свою функцию-предикат для сортировки объектов по алфавиту.
Похожие вопросы
Новые вопросы
c++
C++ — это язык программирования общего назначения. Изначально он разрабатывался как расширение C и имел аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде, который будет скомпилирован с помощью компилятора C++. Используйте тег версии для вопросов, связанных с конкретной стандартной версией [C++11], [C++14], [C++17], [C++20] или [C++23]. и т.д.
std::sort
после заполнения всех элементов вектором.class Names
- это забавный POV для кого-то, у кого есть два символа не-ASCII-7 в его имени. Я очень надеюсь, что это домашнее задание, и я очень надеюсь, что ваш инструктор действительно расскажет вам о важности i18n.