C++
1#include <iostream>
2#include <map>
3#include <string>
4
5int main(void){
6 using namespace std;
7
8 map<string,int>m;
9 int n;
10 cin>>n;
11 for(int i=0;i<n;i++){
12 string key;
13 int val;
14 cin >> key >> val;
15 m[key] = val;
16 }
17 for ( auto const& answer : m ) {
18 cout << answer.first << " " << answer.second << endl;
19 }
20
21 return 0;
22}
[追記]
cin >> str >> m[str] だと cin >> str によって str が書き換わる前に
m[str] が評価されてると推察されます。その検証:
C++
1#include <iostream>
2#include <string>
3
4std::string key;
5int val;
6
7int& foo(const char* str) {
8 key = str; // 引き渡された文字列をコピーののち
9 return val; // val の参照を返す
10}
11
12int main(void){
13 using namespace std;
14 char buffer[64] = "ABRACADABRA";
15 cin >> buffer >> foo(buffer);
16 cout << "key =[" << key << "]\n"; // foo() に引き渡された文字列
17 cout << "val =[" << val << "]\n";
18}
実行結果
abc 3 ← 入力
key =[ABRACADABRA]
val =[3]
たしかに。
※ Windows/Visual C++ 2019 での結果です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/03 06:43
2020/08/03 06:52
2020/08/03 06:52
2020/08/05 07:14 編集
2020/08/03 07:06
2020/08/03 08:57
2020/08/04 06:22 編集
2020/08/05 05:48
2020/08/05 06:05 編集
2020/08/05 05:55
2020/08/05 07:14