Форум программистов, компьютерный форум CyberForum.ru

Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Узнать, есть ли элемент на определенной позиции в экземпляре std::vector http://www.cyberforum.ru/cpp-beginners/thread554563.html
Подскажите пожалуйста, как узнать есть ли элемент на определенной позиции в экземпляре std::vector? Например есть: vector<int> intVector; Нужно узнать есть ли что нибудь на позиции i: intVector P.S. Сам все понял, тему можно удалить.
C++ Консольная программа тестирования [работа с текстовыми файлами] Здравствуйте. Первый раз программирую на С++. Есть "ТЗ": разработать программу для тестирования знаний учащихся (курсач). Подскажите, есть ли на этом форуме похожие темы? Поиском пользовался, но то ли лыжи не те, то ли я... Если же тем нету, то дайте пожалуйста ссылки на тему по работе с файлами и каталогами. То есть нужна следующая информация: -просмотр списка файлов в каталоге -чтение и... http://www.cyberforum.ru/cpp-beginners/thread554560.html
Метод Милна. Расчет по нескольким уравнениям. C++
Приветствую вас. Очень помощь нужна мне © Йода XD. Нужно модернизировать программку, чтобы можно было производить расчет по нескольким уравнениям, а не по одному, заданному программой. Ниже вложено изображение с примерами. Все что нужно сделать в программе: сделать возможным ввод коэффициентов уравнений и выбора степени х и у. Ну и хотелось бы чтобы прога выводила значения правильно))) float...
Описаие класса C++
Задание: Классы Террит единица, область, растение, дерево, цветок,страна. запросы: вывести перечень растений указанного вида, произросшего в террит единице указанного вида; вывести перечень ягодных деревьев, произрастающих в территориальной единице указанного вида вывести количесво видов видов растений указанного вида, произрастающих в территориальной единице указанного вида. ...
C++ Ошибка в cannot convert char * to char вроде поправил теперь выводит ересь( http://www.cyberforum.ru/cpp-beginners/thread554552.html
Всем доброго дня! У меня такая проблемка.... написал программу, но сначала она ругалась на Cannot convert char* to char теперь вроде исправил, но теперь в выводе мне пишет чтото непонятное....Помогите пжалсто =) #include <stdio.h> #include <string.h> #include <conio.h> #include <stdlib.h> void main() { int vhod,b,c,d,e,g ; FILE *f;
C++ Массив указателей на объекты подклассов Доброго времени суток всем!!! Проф задал написать парсер простых математических выражений с использованием скобок. Код не должен выходить за рамки изученого матерьяла и не должен использовать сторонних библиотек Текущая проблема: По условию задания необходимо создать базовый класс "выражение" #pragma once подробнее

Показать сообщение отдельно
DU
1478 / 1054 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
22.04.2012, 02:27     Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция
ну может тогда вот так:

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <map>
#include <string>
#include <algorithm>
#include <iostream>
 
typedef std::map<int, std::string> Map;
// Это мапина, в которой первый элемент - это ключ для строки.
// В разных мапинах строки с одни и тем же ключом считаются ассоциированными.
// Обработка происходит так: в ключевой мапине ищется строка, которая содержит в себе
// слово word. Если такая есть, берем ключ этой строки и ищем строку по этому ключу в
// ассоциативной мапине. Если по этому ключу есть что-то, то выводим то, что нашли.
 
void Process(const Map& keyMap, const Map& assocMap, const std::string word)
{
  std::cout << "-----------------------------------------------------" << std::endl;
  std::cout << "Processing of the '" << word << "' word:" << std::endl;
 
  Map::const_iterator keyIter = keyMap.end();
  for (Map::const_iterator it = keyMap.begin(), end = keyMap.end(); it != end; ++it)
  {
    if (std::string::npos != it->second.find(word))
    {
      keyIter = it;
      break;
    }
  }
 
  if (keyIter == keyMap.end())
  {
    std::cout << "The word is not found in key map." << std::endl;
    return;
  }
 
  Map::const_iterator assocIter = assocMap.find(keyIter->first);
  if (assocIter == assocMap.end())
  {
    std::cout << "The word is not found in associative map." << std::endl;
    return;
  }
 
  std::cout << assocIter->second << std::endl;
}
 
int main()
{
  Map eng;
  Map rus;
 
  eng[0] = "00, 11, 22";
  rus[0] = "xx, yy, zz";
 
  eng[1] = "33, 44, 55";
  rus[1] = "aa, bb, cc";
 
  Process(eng, rus, "11");
  Process(eng, rus, "44");
  Process(rus, eng, "aa");
  Process(rus, eng, "cc");
  Process(eng, rus, "xyz");
  Process(rus, eng, "xyz");
 
  return 0;
}
Полагаться на позиции в сетах нельзя. Сет автоматически сортирует содержимое согласно своему критерию сортировки. Если строка в ключевом сете находится в первой позиции, то это не значит что она находится в этой же позиции в ассоциированном сете.
Возможно прокатит контейнер (не ассоциативный, он в этом случае не такой эффективный, как последовательные) контейнер пары(строка, строка). Поиск в контейнере будет идти по первой (ключевой строке). Если она найдена - выводится вторая (ассоциативная). Но имхо такой подход менее гибкий.

Добавлено через 41 минуту
Все таки правильно искать полное совпадение слов. При поиске подстроки есть вероятность что попадется ненужное слово. При поиске слова пар может подойти паровоз. Вот переделал маленько, но суть осталась та же.

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <map>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
#include <iostream>
 
typedef std::vector<std::wstring> Words;
typedef std::map<int, Words> Map;
 
std::wostream& operator << (std::wostream& out, const Words& words)
{
  std::copy(words.begin(), words.end(),
    std::ostream_iterator<std::wstring, std::wstring::value_type>(out, L", "));
  return out;
}
 
void Process(const Map& keyMap, const Map& assocMap, const std::wstring& word)
{
  std::wcout << L"-----------------------------------------------------" << std::endl;
  std::wcout << L"Processing of the '" << word << L"' word:" << std::endl;
  Map::const_iterator keyIter = keyMap.end();
  for (Map::const_iterator it = keyMap.begin(), end = keyMap.end(); it != end; ++it)
  {
    if (it->second.end() != std::find(it->second.begin(), it->second.end(), word))
    {
      keyIter = it;
      break;
    }
  }
 
  if (keyIter == keyMap.end())
  {
    std::wcout << L"The word is not found in key map." << std::endl;
    return;
  }
 
  Map::const_iterator assocIter = assocMap.find(keyIter->first);
  if (assocIter == assocMap.end())
  {
    std::cout << L"The word is not found in associative map." << std::endl;
    return;
  }
 
  std::wcout << assocIter->second << std::endl;
}
 
int main()
{
  Map eng;
  Map rus;
 
  Words words;
  words.push_back(L"11");
  words.push_back(L"22");
  words.push_back(L"33");
  eng[0] = words;
 
  // Предыдущее заполнение при желании можно было бы заменить на
  // eng[0] = SplitToWords(L"11, 22, 33");
 
  words.clear();
  words.push_back(L"xx");
  words.push_back(L"yy");
  words.push_back(L"zz");
  rus[0] = words;
 
  words.clear();
  words.push_back(L"33");
  words.push_back(L"44");
  words.push_back(L"55");
  eng[1] = words;
 
  words.clear();
  words.push_back(L"aa");
  words.push_back(L"bb");
  words.push_back(L"cc");
  rus[1] = words;
 
  Process(eng, rus, L"11");
  Process(eng, rus, L"44");
  Process(rus, eng, L"aa");
  Process(rus, eng, L"cc");
  Process(eng, rus, L"xyz");
  Process(rus, eng, L"xyz");
 
  return 0;
}
 
Текущее время: 16:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru