как использовать неупорядоченную карту в C ++ - PullRequest
0 голосов
/ 06 апреля 2020

Я пишу программу, которая использует неупорядоченную карту. после некоторого исследования до этого я знаю, что для использования неупорядоченной карты, сначала мы должны поставить заголовок. но это не сработало. заранее спасибо за любые советы. и да, это сообщение об ошибке

 #error This file requires compiler and library support for the \
  ^
umap.cpp: In function 'int main()':
umap.cpp:21:2: error: 'unordered_map' was not declared in this scope
  unordered_map<string, int> siswa;
  ^
umap.cpp:21:22: error: expected primary-expression before ',' token
  unordered_map<string, int> siswa;
                      ^
umap.cpp:21:24: error: expected primary-expression before 'int'
  unordered_map<string, int> siswa;
                        ^
umap.cpp:24:2: error: 'siswa' was not declared in this scope
  siswa["saleh"]=90;
  ^

И вот программа

#include <iostream>
#include <unordered_map>
#include <bits/stdc++.h> 

using namespace std;

void cari(string key){

    if(siswa.find(key)==siswa.end())
        cout<<siswa[key]<<endl;
    else
        cout<<"n/a"<<endl;
}


int main(){


    unordered_map<string, int> siswa;


    siswa["saleh"]=90;
    siswa["mutiara"]=85;
    siswa["icam"]=70;

    int t;
    cin>>t;
    string key;
    for(int i=0;i<t;i++){

        getline(cin,key);
        cari(key);
    }
}

Кстати, извините за мою грязную грамматику: v

1 Ответ

0 голосов
/ 06 апреля 2020

Ошибка области действия относится к тому, что ваша неупорядоченная карта недоступна для функции cari в ее области действия, для которой в качестве параметра можно включить неупорядоченную карту соответствующих типов данных:

void cari(string key, unordered_map<string,int> x)
{
  if(x.find(key)==x.(end))
   cout<<x[key]<<"\n";
  else
   cout<<"n/a"<<"\n";
}

Другое Обратите внимание:

  • Как уже упоминалось в комментариях, избегайте использования <bits/stdc++.h>. Он упоминался тысячу раз, но его повторное использование не является сюрпризом, поскольку новички в СР вводят в заблуждение или имеют склонность использовать его с наиболее распространенной причиной, заключающейся в том, чтобы сэкономить время при написании заголовков, содержащихся в STL. Но тогда вы всегда можете использовать предварительно написанный шаблон при необходимости. Кроме того, большинство проблем не включают в себя более четырех заголовков, так что не составляет труда написать их в течение всего контеста.
    Использование этого заголовка не рекомендуется в первую очередь потому, что он включает в себя все семейство заголовков STL, что делает программу избыточной и, в свою очередь, медленной для компиляции. Более того, хотя он поддерживается в онлайн-судей / компиляторах, он не поддерживается в большинстве IDE (например, Visual Studio) и компиляторов. Его использование также не рекомендуется в производственном коде, поэтому принимайте его как точку, чтобы избежать его использования.

  • Использовать std::string или включать заголовок <cstring> / <string.h>. Обратите внимание, что если вы не объявите пространство имен std (использование которого снова считается плохой практикой ), вам придется использовать std:: в качестве префикса везде, где требуется, например для cin, cout, string и unordered_map здесь. Параметры функции будут выглядеть следующим образом:

void cari(std::string key, std::unordered_map<std::string,int> x)
  • Использовать \n вместо endl, так как последний вызовет ненужный вызов std::flush().

  • while(t--) - лучшая альтернатива, чем для l oop, используемого для итерации по t (или, как я полагаю, тестам), поскольку она короче и отбрасывает использование дополнительная переменная l oop.

...