Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
13 / 12 / 9
Регистрация: 09.11.2012
Сообщений: 367
Записей в блоге: 1

Как правильно забиндить сортировку по ключу

03.01.2014, 03:17. Показов 1220. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
имеется вот такой контейнер
C++
1
vector<map<string,int>> conteyner;
как правильно забиндить сортировку по ключу
C++
1
map<string,int>
очевидно нужно найти через функцию find() ключ и взять для сравнения
C++
1
second
помогите сложить bind:
C++
1
2
3
4
5
sort(conteyner.begin(), conteyner.end(), 
        boost::bind(less<int>(), 
        boost::bind(&std::map<std::string, int>::find, _1), 
        boost::bind(&std::map<std::string, int>::find, _2)
        ));
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.01.2014, 03:17
Ответы с готовыми решениями:

WPF | Как правильно забиндить PasswordBox?
Всем доброго дня. Есть кто сталкивался с passwordbox , и делал что то похожие. Xamp &lt;TextBox Text=&quot;{Binding...

Как правильно забиндить к форме объект
Привет! Например есть простой класс class Client{ public string Name; public string Phone; } и предположим я...

Как правильно забиндить List<string> к ComboBox
есть класс Clfs, в котором есть private List&lt;string&gt; _listProjectName = new List&lt;string&gt;(); public List&lt;string&gt;...

7
 Аватар для Alex566
244 / 155 / 48
Регистрация: 03.04.2013
Сообщений: 317
04.01.2014, 00:16
Мап - это массив отсортированных по ключу элементов. Вектор из мапов это как двумерный массив вторая мера которого посортирована. К тому же в вашем случае ключ строка а значение массив и доступ к нему осуществляется не через секонд, а через first.
0
 Аватар для Crast
72 / 72 / 5
Регистрация: 10.02.2013
Сообщений: 434
04.01.2014, 19:59
Предыдущий комментатор прав. Но делать можно и без boost( нужно c++11).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <map>
#include <vector>
#include <algorithm>
#include <functional>
#include <iostream>
 
template <class T>
void sort_impl(std::vector<T>& vec){
  std::sort(vec.begin(),vec.end(),std::less<T>());      
}
 
int main(){
  std::vector<int> vec = {43,33,55,11};
  auto sort = std::bind(sort_impl<int>, std::ref(vec) );
 // sort_impl(vec); //Лучше сразу так
  sort();
  
  for(auto& el : vec) std::cout << el << " ";
  std::cout << std::endl;
}
0
04.01.2014, 21:40

Не по теме:

Crast, ТС просит помочь сложить ему bind для сортировки vector<map<string,int>>, а вы показываете как вектор интов сортировать.

0
 Аватар для Crast
72 / 72 / 5
Регистрация: 10.02.2013
Сообщений: 434
04.01.2014, 23:37
DiffEreD, разрули по хардкору, как можно отсортировать vector<map<string,int> >. По какому параметру map это можно сделать?

раз int не нравится

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template <class T>
void sort_impl(std::vector<T>& vec){
  std::sort(vec.begin(),vec.end(),std::less<T>());      
}
 
 
int main(){
  typedef std::pair<std::string,int> tp;
  using std::make_pair;
  std::vector<tp> vec = {make_pair(std::string("lock"),1),
             make_pair(std::string("croc"),2)};
  auto sort = std::bind(sort_impl<tp>, std::ref(vec)  );
 // sort_impl(vec); //Лучше сразу так
  sort();
  
  for(auto& el : vec) std::cout << el.first << " " << el.second << "\n";
  std::cout << std::endl;
}
0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
05.01.2014, 15:57
Crast, например отсортировать по первому элементу карты по ключу.
code
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
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <map>
#include <ctime>
 
template<typename T>
void print(const T& v)
{
   for (const auto& m : v)
   {
      std::cout << "~~~~~~~~~\n";
      for (const auto& p : m) std::cout << p.first << " : " << p.second << "\n";
   }
   std::cout << std::endl;
}
 
int main()
{
   using map_t = std::map<std::string, int>;
   std::vector<map_t> v;
 
   srand(static_cast<unsigned>(time(nullptr)));
 
   for (size_t i = 0; i < 5; ++i)
   {
      map_t temp;
      for (size_t j = 0; j < 5; ++j)
      {
         temp.emplace(std::to_string(rand()%100), rand()%100);
      }
      v.push_back(temp);
   }
 
   print(v);
 
   std::sort(v.begin(), v.end(), [](const map_t& m1, const map_t& m2)
   {
      return m1.begin()->first < m2.begin()->first;
   });
 
   std::cout << "\n######################\n\n";
   print(v);
 
   return 0;
}

Вот, и данную сортировку надо выразить не через лямбду, а через bind (я так думаю что это и хотел сделать ТС).

Не по теме:

Меня хватило только на это:

C++
1
2
3
4
5
std::sort(v.begin(), v.end(),
             boost::bind(std::less<std::string>(),
             boost::bind(&map_t::value_type::first, _1),
             boost::bind(&map_t::value_type::first, _2)
                         ));

0
13 / 12 / 9
Регистрация: 09.11.2012
Сообщений: 367
Записей в блоге: 1
06.01.2014, 01:50  [ТС]
Цитата Сообщение от DiffEreD Посмотреть сообщение
Crast, например отсортировать по первому элементу карты по ключу.
найте ключ в карте, узнать значение этого ключа и отсортировать вектор по этому значению.

Добавлено через 5 минут
Цитата Сообщение от DiffEreD Посмотреть сообщение
C++
1
2
3
4
5
std::sort(v.begin(), v.end(),
boost::bind(std::less<std::string>(),
boost::bind(&map_t::value_type::first, _1),
boost::bind(&map_t::value_type::first, _2)
));
этот код если я не ошибаюсь: берет элемент вектора и следующий за ним, и сравнивает ключи (непонятно какие) соответственного первого и второго. а нужно определенные ключи. в общем написал через функциональные объекты. через бинд получается слишком мудрено (точнее не получается)
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
09.01.2014, 22:56
slipp1,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
typedef std::map<string, int> dictionary;
 
bool comparer(const dictionary &a, const dictionary &b)
{
    return a.size() > b.size();
}
 
int main()
{
    std::vector<dictionary> v;
 
    std::sort(v.beign(), v.en(), comparer);
}
Самый простой с пользовательским comparer т.к. std::map не реализует operator<(std::map, std::map)

Кроме того вы не описали как именно сравнивать словари.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.01.2014, 22:56
Помогаю со студенческими работами здесь

WPF: как правильно забиндить свойство контрола?
Делаю простейщий 'UserControl' с одним тестовым полем. SampleUserControl.xaml &lt;TextBlock Text=&quot;{Binding Path=CurrentValue}&quot; /&gt; ...

Как правильно удалить куку по ключу
&lt;?php $key = $_POST; var_dump($key); $cart = unserialize($_COOKIE); var_dump($cart); if(array_key_exists($key,...

Класс ATC, реализовать сортировку и поиск по заданному ключу
Предусмотреть в программе с работающей со структурой, описанной ниже, сохранение вводимых данных в файл и возможность чтение из ранние...

Как правильно сделать сортировку?
Привет ! В базе данных, у каждой записи своя позиция 1, 2, 3… и т.д. Все они выводятся на страницу и пользователь предоставляется...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru