вектор классов - обращение

216
22 февраля 2018, 14:45

Есть класс, есть вектор векторов этого класса. Как обратиться к элементу класса через вектор векторов?

class primer{
public:
string date;
string hello;
};
int main();
primer p[2];
vector<vector<primer>> p1;
vector<primer> p2;
string q = "qwerty";
p[0].date = "22.01";
p[0].hello = "asd";
p2.push_back(p);
p1.push_back(p2);
p[1].date = "22.19";
p[1].hello = "qwerty";
p2.push_back(p);
p1.push_back(p2);

И после обращения необходимо найти в векторе p1 строку которая равна q и вывести все элементы этого класса, которому принадлежит найденная строка

Answer 1

Чтоб компилировалось, нужно так:

int main()
{
    primer p[2];
    vector<vector<primer>> p1;
    vector<primer> p2;
    string q = "qwerty";
    p[0].date = "22.01";
    p[0].hello = "asd";
    p2.push_back(p[0]);
    p1.push_back(p2);
    p[1].date = "22.19";
    p[1].hello = "qwerty";
    p2.push_back(p[1]);
    p1.push_back(p2);
}

Но вот то ли это, что вы хотите - разбирайтесь сами :) Здесь у вас первый вектор в векторе - из одного элемента, второй - из двух...

Дальше просто используйте цикл типа

for(const auto& p2: p1)
{
     // Ищем в p2 строку, если есть - выводим p2
     // Типа перебираем все строки в p2
     //      for(auto x: p2) 
     //          if (x.date == q)  // если строка есть 
     //              for(auto y: p2) cout << y.date;  // выводим весь p2
     // (Набросок на коленке, не для компиляции :))
}

Или вот, даже компилируемый :) -

int main()
{
    primer p[2];
    vector<vector<primer>> p1;
    vector<primer> p2;
    string q = "qwerty";
    p[0].date = "22.01";
    p[0].hello = "asd";
    p2.push_back(p[0]);
    p1.push_back(p2);
    p[1].date = "22.19";
    p[1].hello = "qwerty";
    p2.push_back(p[1]);
    p1.push_back(p2);
    for(const auto& p: p1)
    {
        for(const auto& r: p)
            if (r.hello == q)
                for(const auto& v: p)
                    cout << v.date << " " << v.hello << "\n";
    }
}

Правда, красивее все же через алгоритмы стандартной библиотеки...

READ ALSO
Попытка отсортировать массив

Попытка отсортировать массив

Неиспользуемые переменные

194
Записать рекуррентную формулу иначе C++

Записать рекуррентную формулу иначе C++

Проблема в том что при вычислении не хватает памяти и считает только до 7 символов после запятой, нужно чтобы считало хотя бы 10 символов после

228
Запуск окна wxWidgets в DLL с потока

Запуск окна wxWidgets в DLL с потока

Как осуществить запуск окна с нового потока?

313
возврат значения из потока

возврат значения из потока

Надо чтобы возвращаемое значение с можно было использовать как-то в int main()Как в случае передачи аргументов функции в поток принять возвращаемое...

193