используя массив символов в качестве ключа на карте - PullRequest
2 голосов
/ 09 февраля 2020

Я пытаюсь использовать char[] как ключ для map:

#include<iostream>
#include<map>
#include<string>
#include<utility>
#include<list>

using namespace std;

int main(void)
{
    map<char[10],int> m;

    char c[10]={'1','2','3','4','5','6','7','8','9','0'};
    m[c]=78;
    return 0;
}

Но выдает ошибку:

ошибка: массив используется как инициализатор

секунда (std :: forward <_Args2> (std :: get <_Indexes2> (__ tuple2)) ...)

даже это не ' t работа: m["abcdefghi"]=4;

Как использовать char [] в качестве ключа? У меня есть пара вопросов по SO, но они не очень помогли.

ПРИМЕЧАНИЕ: Я использовал string, но я хочу попробовать char[] просто для любопытства

Ответы [ 2 ]

3 голосов
/ 09 февраля 2020

Массивы не имеют ни конструктора копирования, ни оператора назначения копирования. И нет никакого оператора по умолчанию <для массивов. </p>

Вместо массива используйте стандартный контейнер std::array.

Например

#include<iostream>
#include <array>
#include<map>

int main()
{
    std::map< std::array<char, 10>, int> m;

    std::array<char, 10> c = {'1','2','3','4','5','6','7','8','9','0'};
    m[c]=78;

    return 0;
}
0 голосов
/ 09 февраля 2020

Используйте std::array:

#include <array>
#include <iostream>
#include <map>

int
main()
{
  using key_type = std::array<char, 10>;
  std::map<key_type, int> m;

  key_type c{ '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' };
  m[c] = 78;
}

Если вы хотите переменный размер, используйте std::string_view:

#include <iostream>
#include <map>
#include <string_view>

int
main()
{
  std::map<std::string_view, int> m;

  char c[10] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' };
  m[{c, sizeof(c)}] = 78;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...