Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 971
1

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

27.04.2013, 19:09. Просмотров 1599. Ответов 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 работает довольно быстро, быстрее чем ручная реализация быстрой сортировки.
Мне необходимо все по максимуму быстро работающее, т.к. используются большие массивы данных.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2013, 19:09
Ответы с готовыми решениями:

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же...

Как передать целочисленную матрицу типа std::vector<std::vector<int> > в функцию?
Здравствуйте. Почитал на форуме, но так и не понял что я делаю не так. Имеется двумерный вектор....

Использование std::sort для собственно vector'a
Всем доброго времени суток, необходимо создать рабочий контейнер вектора с итератором, сказано -...

std::copy из vector<double> в *double, непонятный warning
double myD={10,20,30,40,50,60,70}; std::vector&lt;double&gt; myvector (7); std::copy ( myD, myD+7,...

8
413 / 409 / 95
Регистрация: 06.10.2011
Сообщений: 832
27.04.2013, 19:16 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;
}
1
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 971
27.04.2013, 19:25  [ТС] 3
Цитата Сообщение от Olivеr Посмотреть сообщение
return lexicographical_compare(begin(a), end(a), begin(b), end(b));}
а можно их сравнивать через memcmp? и если да, то кто быстрее сравнит?
0
413 / 409 / 95
Регистрация: 06.10.2011
Сообщений: 832
27.04.2013, 19:35 4
Тогда, как я считаю, данные придется хранить в каком-нибудь массиве.
Но толку? Если lexicographical_compare реализована на одном цикле, операторах !=, < ?
Можно даже самому написать, строчек 5-8.
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 971
27.04.2013, 20:24  [ТС] 5
Цитата Сообщение от Olivеr Посмотреть сообщение
twoDimenVec vec { {1,2,3}, {0,5,7}, {0,5,1} };
компилятор ругается на это... говорит, что перед первой { нужна запятая
0
413 / 409 / 95
Регистрация: 06.10.2011
Сообщений: 832
27.04.2013, 20:25 6
Это для компиляторов с поддержкой C++11. Вам переписать для C++98?
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 971
27.04.2013, 20:44  [ТС] 7
Если можно, то буду очень признателен.
0
413 / 409 / 95
Регистрация: 06.10.2011
Сообщений: 832
27.04.2013, 20:51 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;
}
1
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 971
27.04.2013, 22:35  [ТС] 9
а как скопировать строку из этой матрицы?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.04.2013, 22:35

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Error C2664: std::vector<_Ty>::push: невозможно преобразовать параметр 1 из 'double' в 'const std::string &'
#include &lt;iostream&gt; #include &lt;stack&gt; #include &lt;sstream&gt; #include &lt;string&gt; using namespace...

Вывести значения std::vector<std::vector<int*> >
Подскажите, как вывести значения? const size_t row = 3; const size_t col = 3;...

Как изменять размер std::vector<std::vector>?
Здравствуйте, как нужно изменять размер std::vector&lt;std::vector&gt; например: ...

Cannot convert 'std::vector<double>' to 'double'
Помогите пожалуйста исправить ошибки, понимаю почему они тут но не знаю как исправить ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.