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

Разработка контейнера типа Карта (Map) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти площадь n-угольника http://www.cyberforum.ru/cpp-beginners/thread672768.html
нужно написать прогу, вводитса натуралбное число n, и действительных чисел х1, у1… хn, уn, найти площу n-кутника, вершины у коророва (х1, у1),…,( хn, уn). все фи**я, но какая есть формула для ращоту площи? помогите пожалуйста..!
C++ Заполнение матрицы по спирали (из центра по часовой стрелке) Пользователь должен ввести размерность матрици!Матрица квадратная!А программа должна заполнить её числами по порядку 1 2 3 4 5 .... (из середины),как змейка, по часовой стрелке Вот пример, чтоб было ясно 37 38 39 40 41 42 43 36 17 18 19 20 21 44 35 16 5 6 7 22 45 34 15 4 1 8 23 46 33 14 3 2 9 24 47 32 13 12 11 10 25 48 31 30 29 28 27 26 49 http://www.cyberforum.ru/cpp-beginners/thread672765.html
C++ Сортировка массива методом выбора
Помогите, пожалуйста!в сишке я не особо разбираюсь... вот задание: Отсортировать элементы массива по возрастанию методом выбора. Программа должна иметь текстовое меню и состоять из подпрограмм. Предусмотреть ввод массива с клавиатуры, генерацию случайных чисел и вывод результата обработки на экран. #include <iostream> #include <cstdlib> #include <ctime> #include <vcl.h> #include...
Сумма цифр натурального числа C++
люди, обясните мне пожалуста как работает ета функция { return n ? n % 10 + suma(n / 10) : 0; } , полностью опишите как ето работает, и если есть более "нубский" вариант етой функции то напишите, а то ета функция работает но как я не знаю. мне надо здать лабараторку, и препод сразу поймет что ето не моя функция. вот весь код, если что #include<conio.h> #include<stdio.h> int suma(int n) {...
C++ build error [xxx.exe] error 1 http://www.cyberforum.ru/cpp-beginners/thread672742.html
Почему после компиляции dev-cpp выдает такую ошибку: D:\*****\Makefile.win Error 1 При компиляции в visual с все в порядке Добавлено через 11 минут разобрался уже
C++ Простенькая процедура // Вторая лаба.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; /* Процедура ввода матриц */ void vvod2m(int x,int Nx,int Mx) { подробнее

Показать сообщение отдельно
Deimoser
4 / 4 / 0
Регистрация: 16.10.2012
Сообщений: 39
16.10.2012, 23:00  [ТС]     Разработка контейнера типа Карта (Map)
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
А как именно вы организуете пары ключ — значение? Список? Вектор? Дерево? Ведь их наверняка будет больше одной, их надо как-то упорядочить в памяти.
Не совсем понимаю как реализовать пару ключ-значение через двоичное дерево. Родитель - ключ, а наследник - значение?

Наткнулся на код КЧ дерева на Интуите, но компилятор (VS10) отказывается работать

Код
//создание красно-черного дерева
void Make_RBTree(RBTree** Node, int n){
  int Data;
  while (n > 0) {
    cout << "Введите значение ";
        cin >> Data;
    Insert_Node(Node, Data);
    n--;
  }
}

//добавление узла в красно-черное дерево
void Insert_Node(RBTree** Node,int Data) {
  RBTree **Curent, *Parent, *New_Node;
  Curent = Node;
  Parent = NIL;
  // Поиск местоположения
  while (*Curent != NIL) {
    Parent = (*Curent);
    Curent = Data < (*Curent)->Data ? &((*Curent)->Left) : &((*Curent)->Right);
  }
  // Создание нового узла
  New_Node = new RBTree();
  New_Node->Data = Data;
  New_Node->Parent = Parent;
  New_Node->Left = NIL;
  New_Node->Right = NIL;
  New_Node->color = RED;
  // Вставка элемента в дерево
  if(Parent != NIL){
    if (Data < Parent->Data) Parent->Left = New_Node;
    else Parent->Right = New_Node;
  }
  else (*Curent) = New_Node;
  Insert_Fixup(Node, New_Node);
} 

// Поддержка баланса дерева после вставки нового элемента
void Insert_Fixup(RBTree** Node,RBTree* New_Node){
  RBTree* Current = New_Node;
  // Проверка свойств дерева
  while (Current != *(Node) && Current->Parent->color == RED){
    // если есть нарушение
    if (Current->Parent == Current->Parent->Parent->Left) {
      RBTree *ptr = Current->Parent->Parent->Right;
      if (ptr->color == RED) {
        Current->Parent->color = BLACK;
        ptr->color = BLACK;
        Current->Parent->Parent->color = RED;
        Current = Current->Parent->Parent;
      }
      else {
        if (Current == Current->Parent->Right) {
          // сделать Current левым потомком
          Current = Current->Parent;
          Rotate_Left(Node,Current);
        }
        // перекрасить и повернуть
        Current->Parent->color = BLACK;
        Current->Parent->Parent->color = RED;
        Rotate_Right(Node,Current->Parent->Parent);
      }
    }
    else {
      RBTree *ptr = Current->Parent->Parent->Left;
      if (ptr->color == RED) {
        Current->Parent->color = BLACK;
        ptr->color = BLACK;
        Current->Parent->Parent->color = RED;
        Current = Current->Parent->Parent;
      }
      else {
        if (Current == Current->Parent->Left) {
          Current = Current->Parent;
          Rotate_Right(Node,Current);
        }
        Current->Parent->color = BLACK;
        Current->Parent->Parent->color = RED;
        Rotate_Left(Node,Current->Parent->Parent);
      }
    }
  }
  (*Node)->color = BLACK;
}

//поворот узла Current влево
void Rotate_Left(RBTree** Node,RBTree *Current) {
  RBTree *ptr = Current->Right;
  Current->Right = ptr->Left;
  if (ptr->Left != NIL) ptr->Left->Parent = Current;
  if (ptr != NIL) ptr->Parent = Current->Parent;
  if (Current->Parent != NIL) {
    if (Current == Current->Parent->Left)
      Current->Parent->Left = ptr;
    else
      Current->Parent->Right = ptr;
    }
  else {
    (*Node) = ptr; 
  }
  ptr->Left = Current;
  if (Current != NIL) Current->Parent = ptr;
}

//поворот узла Current вправо
void Rotate_Right(RBTree** Node,RBTree *Current) {
  RBTree *ptr = Current->Left;
  Current->Left = ptr->Right;
  if (ptr->Right != NIL) ptr->Right->Parent = Current;
  if (ptr != NIL) ptr->Parent = Current->Parent;
  if (Current->Parent != NIL) {
    if (Current == Current->Parent->Right)
      Current->Parent->Right = ptr;
    else
      Current->Parent->Left = ptr;
  }
  else {
    (*Node) = ptr;
  }
  ptr->Right = Current;
  if (Current != NIL) Current->Parent = ptr;
}

//печать красно-черного дерева
void Print_RBTree(RBTree* Node, int l){
  int i;
  if (Node != NIL) {
    Print_RBTree(Node->Right, l+1);
    for (i=0; i< l; i++) cout << "    ";
    if (Node->color == RED) 
      SetConsoleTextAttribute(hStd,FOREGROUND_RED);
    cprintf ("%4ld", Node->Data);
    SetConsoleTextAttribute(hStd,atr);
    Print_RBTree(Node->Left, l+1);
  }
  else cout << endl;
}

//прямой обход красно-черного дерева
void PreOrder_RBTree(RBTree* Node){
  if (Node != NIL) {
    printf ("%3ld",Node->Data);
    PreOrder_RBTree(Node->Left);
    PreOrder_RBTree(Node->Right);
  }
}

//обратный обход красно-черного дерева
void PostOrder_RBTree(RBTree* Node){
  if (Node != NIL) {
    PostOrder_RBTree(Node->Left);
    PostOrder_RBTree(Node->Right);
    printf ("%3ld",Node->Data);
  }
}

//симметричный обход красно-черного дерева
void SymmetricOrder_RBTree(RBTree* Node){
  if (Node != NIL) {
    PostOrder_RBTree(Node->Left);
    printf ("%3ld",Node->Data);
    PostOrder_RBTree(Node->Right);
  }
}

//проверка пустоты красно-черного дерева
bool Empty_RBTree(RBTree* Node){
  return ( Node == NIL ? true : false );
}

//освобождение памяти, выделенной под красно-черное дерево
void Delete_RBTree(RBTree* Node){
  if (Node != NIL) {
    Delete_RBTree(Node->Left);
    Delete_RBTree(Node->Right);
    delete(Node);
  }
}
Добавлено через 18 минут
Нужен контейнер работающий по принципу map, "ключ" => "значение". Способ реализации значения не имеет (но интереснее было бы взглянуть на все возможные), главное соблюсти главное условие: "не использовать средства C++, такие как объекты, классы, шаблоны классов". Если кто подкинет исходный код буду очень благодарен.
 
Текущее время: 12:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru