Игорюха |
Отправлено: 20.02.2007, 16:27 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 13
|
Как можно создать массив vector< string>(массив векторов), чтоб он был многомерным, и как его отсортировать по определнному полю? |
|
Игорюха |
Отправлено: 20.02.2007, 22:01 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 13
|
как создать я разобрался... а вот как вывести на экран в консольном режиме эту ерунду не понимаю...
пишу
.....................................
#include < vector>
..................
vector< string> s;
(цикл 1)
. (цикл 2)
. cout << s[i][j]; //сдесь ошибка... (((
. (конец цикла 2)
cout << endl;
(конец цикла 1)
Отредактировано Игорюха — 20.02.2007, 22:02 |
|
olegenty |
Отправлено: 21.02.2007, 08:56 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
как непосредственно выглядит ошибка? вышел за границы индекса? ничего удивительного, хранящиеся в векторе строки разной длины.
кроме того, нет смысла бегать по символам строки, её можно отправить в cout целиком, то есть достаточно верхнего цикла.
|
|
kertio |
Отправлено: 21.02.2007, 12:30 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 2
|
На сколько я знаю vector это одномерный массив, тоесть доступ к нему возможен только как одномерному массиву.
Например:
#include
using namespace std;
vector _s;
s.push_back( "bla" );
s.push_back( "blablabla" );
s.push_back( "blabla" );
/*...*/
string _s1 = _s[0]; // _s1 = "bla"
/*...*/
поэтому и не работает конструкция с доступом ко элементу _s[i][j];
а сортировать можно функцией sort(), надо добавить
Пример:
#include
#include
using namespace std;
vector _s;
s.push_back( "bla" );
s.push_back( "blablabla" );
s.push_back( "blabla" );
/*...*/
sort(_s.begin(), _s.end() );/*...*/
|
|
kertio |
Отправлено: 21.02.2007, 12:32 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 2
|
ага... точно ученик — кочегар :-) нужны заголовочные файлы для примера 2 < vector> и < algorithm>
Надеюсь помог. |
|
Игорюха |
Отправлено: 21.02.2007, 13:14 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 13
|
CODE | #include <vector.h>
#include <algorithm>
#define NR 7
#define NC 5
using namespace std;
/*...*/
int main()
{
char buff[100];
ifstream infile;
infile.open("file.txt");
vector<string> **s;
s = new vector<string> *[NR];
for (int i = 0; i<NR; i++){
s[i] = new vector<string>[NC];
}
for (int i = 0; i<NR; i++){
for (int j = 0; j<NC; j++){
infile.getline(buff,sizeof(buff));
s[i][j].push_back(buff);
}
}
for (int i = 0; i<NR; i++){
for (int j = 0; j<NC; j++){
cout << s[j];//если написанно так, то все работает нормально,
//но выдает какие-то цыфры которых там и в помине нет
}
cout << endl;
} | |
|
olegenty |
Отправлено: 21.02.2007, 13:48 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
2 kertio — объясни, почему это работает
CODE |
std::vector < std::string > vs;
vs.push_back("1234");
vs.push_back("5678");
for (int i = 0; i < vs.size(); i++)
{
for (int j = 0; j < vs[i].length(); j++)
{
ShowMessage(vs[i][j]);
}
}
|
а работает это потому, что vector[i] возвращает string, которая в свою очередь обладает оператором [].
|
|