Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.88
mat_for_c
131 / 126 / 28
Регистрация: 26.04.2013
Сообщений: 636
Завершенные тесты: 2
#1

vector<vector<double>> + std::sort() - C++

27.04.2013, 19:09. Просмотров 1066. Ответов 8
Метки нет (Все метки)

Позвольте узнать... Возможно ли через vector<vector<double>> и функцию std::sort()
отсортировать строки массива в лексикографическом порядке?
Пример:
1 2 3
0 5 7
0 5 1
Получим:
0 5 1
0 5 7
1 2 3

Получится ли сравнивать строки через memcmp() для быстрого сравнения?
Как я понял, sort работает довольно быстро, быстрее чем ручная реализация быстрой сортировки.
Мне необходимо все по максимуму быстро работающее, т.к. используются большие массивы данных.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2013, 19:09     vector<vector<double>> + std::sort()
Посмотрите здесь:

std::map, std::vector и порядок обхода коллекции C++
Передача функции указатель на элемент std::vector<std::string> C++
C++ error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Vector<int>::Vector<int>(void)" (?0?$Vector@H@@QAE@XZ) в функции _main
C++ vector<vector<double>> => 2 * vector<vector<double>>
C++ std::copy из vector<double> в *double, непонятный warning
Вывести значения std::vector<std::vector<int*> > C++
C++ Error C2664: std::vector<_Ty>::push: невозможно преобразовать параметр 1 из 'double' в 'const std::string &'
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
27.04.2013, 19:16     vector<vector<double>> + std::sort() #2
Можно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
 
using namespace std;
 
typedef int vecType;
typedef vector<vecType> oneDimenVec;
typedef vector<oneDimenVec> twoDimenVec;
 
int main()
{
    srand(time(0));
 
    twoDimenVec vec { {1,2,3}, {0,5,7}, {0,5,1} };
 
    sort(begin(vec), end(vec), [](const oneDimenVec &a, const oneDimenVec &b) {
        return lexicographical_compare(begin(a), end(a), begin(b), end(b));} );
    for_each(begin(vec), end(vec), [](const oneDimenVec &v) {
            copy(begin(v), end(v), ostream_iterator<vecType>(cout, " "));
            cout << endl;
    });
 
    return 0;
}
mat_for_c
131 / 126 / 28
Регистрация: 26.04.2013
Сообщений: 636
Завершенные тесты: 2
27.04.2013, 19:25  [ТС]     vector<vector<double>> + std::sort() #3
Цитата Сообщение от Olivеr Посмотреть сообщение
return lexicographical_compare(begin(a), end(a), begin(b), end(b));}
а можно их сравнивать через memcmp? и если да, то кто быстрее сравнит?
Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
27.04.2013, 19:35     vector<vector<double>> + std::sort() #4
Тогда, как я считаю, данные придется хранить в каком-нибудь массиве.
Но толку? Если lexicographical_compare реализована на одном цикле, операторах !=, < ?
Можно даже самому написать, строчек 5-8.
mat_for_c
131 / 126 / 28
Регистрация: 26.04.2013
Сообщений: 636
Завершенные тесты: 2
27.04.2013, 20:24  [ТС]     vector<vector<double>> + std::sort() #5
Цитата Сообщение от Olivеr Посмотреть сообщение
twoDimenVec vec { {1,2,3}, {0,5,7}, {0,5,1} };
компилятор ругается на это... говорит, что перед первой { нужна запятая
Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
27.04.2013, 20:25     vector<vector<double>> + std::sort() #6
Это для компиляторов с поддержкой C++11. Вам переписать для C++98?
mat_for_c
131 / 126 / 28
Регистрация: 26.04.2013
Сообщений: 636
Завершенные тесты: 2
27.04.2013, 20:44  [ТС]     vector<vector<double>> + std::sort() #7
Если можно, то буду очень признателен.
Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
27.04.2013, 20:51     vector<vector<double>> + std::sort() #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
 
using namespace std;
 
typedef int vecType;
typedef vector<vecType> oneDimenVec;
typedef vector<oneDimenVec> twoDimenVec;
 
bool compare(const oneDimenVec &a, const oneDimenVec &b)
{   return lexicographical_compare(begin(a), end(a), begin(b), end(b)); }
 
void print(const oneDimenVec &v)
{
    copy(begin(v), end(v), ostream_iterator<vecType>(cout, " "));
    cout << endl;
}
 
int main()
{
    twoDimenVec vec(3, oneDimenVec(3));
    vec[0][0] = 1;
    vec[0][1] = 2;
    vec[0][2] = 3;
    vec[1][0] = 0;
    vec[1][1] = 5;
    vec[1][2] = 7;
    vec[2][0] = 0;
    vec[2][1] = 5;
    vec[2][2] = 1;
 
    sort(vec.begin(), vec.end(), compare);
    for_each(vec.begin(), vec.end(), print);
 
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2013, 22:35     vector<vector<double>> + std::sort()
Еще ссылки по теме:

C++ Не работает функция sort (vector, vector)
Как изменять размер std::vector<std::vector>? C++
Std::vector/QVector в классе или std::vector/QVector классов? C++
C++ Как передать целочисленную матрицу типа std::vector<std::vector<int> > в функцию?
Std::vector<std::pair<std::vector<int>::iterator, std::vector<int>::iterator> C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
mat_for_c
131 / 126 / 28
Регистрация: 26.04.2013
Сообщений: 636
Завершенные тесты: 2
27.04.2013, 22:35  [ТС]     vector<vector<double>> + std::sort() #9
а как скопировать строку из этой матрицы?
Yandex
Объявления
27.04.2013, 22:35     vector<vector<double>> + std::sort()
Ответ Создать тему
Опции темы

Текущее время: 10:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru