質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

受付中

C++のunordered_mapによるハッシュ連想配列

syachi
syachi

総合スコア2

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1回答

0評価

0クリップ

224閲覧

投稿2022/04/21 08:37

C++のハッシュ連想配列クラスunordered_mapについての質問です。
IPアドレスとホスト名の対応を標準入力から読み、コマンドライン引数に指定したホスト名に対応するIPアドレスを出力したいのですが、指定したホスト名に対応するIPアドレスだけを出力するコードが分かりません。

テキストファイルに
127.0.0.1 localhost
::1 ip6-localhost
10.30.5.1 ehime.sun.ac.jp
と書き、
./a/out  ehime.sun.ac.jp < test.txt
と打つと
10.30.5.1
と表示されるようにしたいです。

今の段階で書いているコードは以下の通りです。
#include<iostream>
#include<string>
#include<boost/algorithm/string.hpp>
#include<boost/tokenizer.hpp>
#include<unordered_map>

using namespace std;
using namespace boost;

typedef char_separator<char> CHAR_SEPARATOR;
typedef tokenizer<CHAR_SEPARATOR> TOKENIZER;

int main(int argc, char *argv[]) {
unordered_map<string, string>histogram;
string line;

CHAR_SEPARATOR separator(" ");

while(getline(cin, line)){
TOKENIZER tokens(line, separator);
for (auto token = tokens.begin(); token != tokens.end() ;token++) histogram[*tokens.begin()]=*tokens.end() ;
}

for (auto i = histogram.begin(); i !=histogram.end(); i++)
cout << i->first<<endl ;
return 0;
}

回答よろしくお願いします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

int32_t

2022/04/21 08:49

現状のコードで、最後のforループで期待される結果が表示されてますか?
syachi

2022/04/21 09:30

表示されていません。 最後のfor文をif文に変えて目的のhistogram.beginを出力するように書いたらよいと思ったのですが。
int32_t

2022/04/21 09:39

すいみません、そういう意味ではなくて、最後のforループで何が表示されますか? histogramにすべてのデータが入っていることは確認できましたか? あと、unordered_map のメンバ関数一覧を眺めても何をすればいいか見つけられませんか? https://cpprefjp.github.io/reference/unordered_map/unordered_map.html
syachi

2022/04/21 10:00

中止(コアダンプ)と表示されています。 operator[]を使うと良いのでしょうか?
int32_t

2022/04/21 23:31

unorderd_map にデータを入れる処理はどうしても必要なので、まずは現状のコードがまともに動くようにしましょう。 > 中止(コアダンプ)と表示されています。 では、そこを直してください。 たぶん *tokens.end() が原因です。end() のイテレータを * でデリファレンスするのは常に間違いです。end() は範囲外を意味するイテレータなので。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。