1 / 1 / 1
Регистрация: 23.03.2017
Сообщений: 101
1

В множестве set или в контейнере map всегда остается только последний элемент

02.12.2019, 10:53. Показов 1542. Ответов 1
Метки нет (Все метки)

При вызове функции с параметрами (declare some_string) в множество добавляется элемент, и он заменяет собой предыдущий. В итоге, всегда остается только 1 элемент, и размер множества тоже =1.

Вызываю:
>>> declare str
str 1
>>> declare some_string
some_string 1
>>> declare aaaaa
aaaaa 1

Объявление:
C++
1
std::set <char*> Variables;
Функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int smallsh_declare(char **args)
{
    set <char*>::iterator it;
    char * s = new char [1024];
    s = args[1];
    Variables.insert(s);
    for (it = Variables.begin(); it != Variables.end(); it++) {
        char* s = *it;
        printf("%s %d", s, Variables.size());
    }
    return 1;
}
Вообще мне нужно хранить ключ-значение (declare my_key some_value), поэтому пробовал использовать map, но там точно такая же ситуация.
Пробовал выделять память под строку, но это не помогает. Не знаю, что за фигня там творится.

Подскажите, пожалуйста!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2019, 10:53
Ответы с готовыми решениями:

set и map при добавлении сохраняется только последний элемент. Размер множества всегда равен 1
При вызове функции с параметрами (declare some_string) в множество добавляется элемент, и он...

CSS FLEXBOX: Нужно чтобы последний элемент в контейнере растянулся
Контейнеру box прописываю: #box { display: flex; flex-direction: column; } Далее,

Как из map выбрать последний элемент?
Как из map выбрать последний елемент? map.end()-1 некатит

Последний элемент массива всегда заменяется нулём
Товарищи, ну прям оказия. Весь вечер не могу ошибку отловить. Имеется таблица JTable mainTable =...

1
Мозгоправ
1735 / 1029 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
02.12.2019, 12:48 2
Лучший ответ Сообщение было отмечено Эникей как решение

Решение

Эникей, а что вы хотели? Что написали, то и получили:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int smallsh_declare(char **args)
{
    set <char*>::iterator it;
    char * s = new char [1024];              // выделили память, указатель сохранили в s
    s = args[1];                             // плюнули на выделенную память, s теперь указывает на строку из args
    Variables.insert(s);                     // вставили в set указатель на строку args[1]
    for (it = Variables.begin(); it != Variables.end(); it++) {  // Variables содержит один указатель на char
        char* s = *it;
        printf("%s %d", s, Variables.size());
    }
    return 1;
}
Добавлено через 9 минут
Эникей, предполагаю, что вам нужно что-то типа такого:
C++
1
2
3
4
5
6
7
8
9
int smallsh_declare(map<string, string>& variables, size_t argc, char **argv)
{
    if (argc % 2 == 1)
        return -1;   // нечётное количество аргументов
    variables.clear();
    for (size_t i = 0; i < argc; i += 2)
        variables[string(argv[i])] = string(argv[i + 1]);
    return variables.size();
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2019, 12:48
Помогаю со студенческими работами здесь

Не получается вывести и удалить последний элемент контейнера map
Не получается вывести и удалить последний элемент контейнера map. Для первого (begin) всё...

Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция
Есть код №1. Он выводить на экран позицию нужного мне слова (только если в середине 1 слово а не 2...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru