IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Условия сортировки в STL, C++
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 86
Пол: Мужской
Реальное имя: Илья

Репутация: -  1  +


А можно ли в priority_queue (ну и в ее подобных) в критерие сортировки указать (если равно чему-то то не соритровать)? Например, мне нужно сформировать heap, но чтобы первый элемент не был равен X.

P.S. И вот еще такой вопрос созрел: можно ли из вектора сделать что-то вроде двумерного массива (т.е. не 1 строка, а 2 например)? если да, то как, и как потом с этим работать?

Сообщение отредактировано: first_day -


--------------------
Я бы изменил мир, да Бог не дает исходников.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
Мне интересно как пишутся эти критерии соритровки.
Очень просто. Поскольку std::less - это структура, унаследованная от std::binary_function, то пишем свою структуру - наследника этой же STL-евской:

#include <fstream>
#include <queue>
#include <vector>
#include <iomanip>
using namespace std;

template <class T>
struct my_sort: public binary_function<T, T, bool> {

// функция должна быть константной, поскольку так же из константной и вызывается
int s(int value) const {
int sum = 0;
while(value > 0) {
sum += value %10;
value /= 10;
}
return sum;
}

// вот, собственно, что нам и требовалось:
bool operator() (const T& first, const T& second) const {
return s(first) > s(second);
}
};

int main() {
const int n = 10;
int arr[10] = {121, 311, 37, 114, 555, 436, 2117, 128, 979, 234};
priority_queue< int, vector<int>, my_sort<int> > q;
for(int i = 0; i < n; i++) {
q.push(arr[i]);
}

while (q.size() > 0)
{
int value = q.top(); q.pop();
cout << value << endl;
}
return 0;
}
Попробуй догадаться, в каком порядке будут выводиться числа из приоритетной очереди? smile.gif

Цитата
можно ли из вектора сделать что-то вроде двумерного массива (т.е. не 1 строка, а 2 например)? если да, то как
Можно, вот так, например:

	vector< vector<int> > mx(2, vector<int>());
mx[0].push_back(10);
mx[1].push_back(20);
cout << mx[0][0] << endl << mx[1][0] << endl;
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 17.06.2024 10:08
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name