Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2010, 16:20   #11
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Цитата:
iter = search(ghostS.begin(),ghostS.end(), tempalt, tempalt, linksearch);
iter = search(ghostS.begin(),ghostS.end(), tempalt, tempalt+1, linksearch);
Вот и вся загадка.
the_deer_one вне форума Ответить с цитированием
Старый 03.09.2010, 11:43   #12
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

для поиска по предикату в векторе юзай find_if с функторами, для сортировки вектора заведи несколько предикатов и передавай в функцию sort тот, который тебе нужен

Код:
#include "stdafx.h"
#include<iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
typedef pair<string, int> T;

class myfunctor
{
public:
	myfunctor(string keyval):m_key(keyval){}
	bool operator() (const T& p)
	{
		return (p.first == m_key);
	}
private:
	string m_key;
};
bool forward_sort(const T& l, const T& r)
{
	return l.second < r.second;
}
bool backward_sort(const T& l, const T& r)
{
	return l.second > r.second;
}

void out(const T& val)
{
	cout << val.first << " " << val.second <<endl;
}
int main() {
    
	vector<T> v;
	v.push_back(make_pair("Moscow", 1));
	v.push_back(make_pair("St.Petersburg", 2));
	v.push_back(make_pair("Saratov", 3));
	v.push_back(make_pair("Penza", 4));
	vector<T>::const_iterator it = find_if(v.begin(), v.end(), myfunctor("Moscow"));
	cout<< it->first << " " << it->second << endl;

	sort(v.begin(), v.end(), forward_sort);
	for_each(v.begin(), v.end(), out); 
	sort(v.begin(), v.end(), backward_sort);
	for_each(v.begin(), v.end(), out);
    return 0;
}
не надо юзать указатели на pair, повторяю - это плохая практика! можно в pair хранить указатель на объект, но сам pair должен быть объектом, а не указателем

Последний раз редактировалось Sazary; 03.09.2010 в 19:15.
sashonk вне форума Ответить с цитированием
Старый 03.09.2010, 16:38   #13
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

sashonk
Оо. В предикат тоже можно значения передавать!
Спасибо за функтор.

Цитата:
для сортировки вектора заведи несколько предикатов и передавай в функцию sort тот, который тебе нужен
А не слишком ли жирно, пересортировывать всё каждый раз? Я же для того и делал вектор указателей, что бы один набор данных держать отсортированным разными способами.

Цитата:
можно в pair хранить указатель на объект, но сам pair должен быть объектом, а не указателем
Да не вопрос, заменю pair на структуру, если это чем-то лучше. Но почему pair должен быть объектом?? Это же шаблон, создающий обычную структуру.
the_deer_one вне форума Ответить с цитированием
Старый 04.09.2010, 21:10   #14
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

Цитата:
Я же для того и делал вектор указателей, что бы один набор данных держать отсортированным разными способами.
т.е. если нужно добавить объект в массив, тебе приходится добавлять указатель в каждый из массивов указателей и пересортировывать их? по-моему жирно и неудобно как раз это.
sashonk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в векторе. the_deer_one Общие вопросы C/C++ 3 31.08.2010 17:52
Вычислить сумму всех четных чисел в векторе malova Microsoft Office Excel 2 31.05.2010 09:09
Уничтожение ссылочных массивов. jojahti Общие вопросы C/C++ 2 22.08.2009 01:03
Алгоритм поиск текста Des Общие вопросы Delphi 5 27.04.2009 22:01