![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
first_day |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 86 Пол: Мужской Реальное имя: Илья Репутация: ![]() ![]() ![]() |
А можно ли в priority_queue (ну и в ее подобных) в критерие сортировки указать (если равно чему-то то не соритровать)? Например, мне нужно сформировать heap, но чтобы первый элемент не был равен X.
P.S. И вот еще такой вопрос созрел: можно ли из вектора сделать что-то вроде двумерного массива (т.е. не 1 строка, а 2 например)? если да, то как, и как потом с этим работать? Сообщение отредактировано: first_day - 3.05.2008 15:06 -------------------- Я бы изменил мир, да Бог не дает исходников.
|
![]() ![]() |
volvo |
![]()
Сообщение
#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;
}
Попробуй догадаться, в каком порядке будут выводиться числа из приоритетной очереди? ![]() Цитата можно ли из вектора сделать что-то вроде двумерного массива (т.е. не 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;
|
![]() ![]() |
![]() |
Текстовая версия | 7.08.2025 5:45 |