配列はできることがわかりましたが、ハッシュは、C++ではどのように記述ふれば良いのでしょうか?
/*
C++ VS2005でハッシュのようなことは可能でしょうか?
*/
int main(void){
/* Perlの場合
%ken = (
"北海道"=>"札幌市",
"宮城県"=>"仙台市",
"東京都"=>"東京(新宿区)",
"愛知県"=>"名古屋市",
"大阪府"=>"大阪市",
"広島県"=>"広島市",
"福岡県"=>"福岡市",
"沖縄県"=>"那覇市",
);
print $ken{"東京都"};
*/
return 0;
}
No.1ベストアンサー
- 回答日時:
本当に必要なのは、ハッシュではなく連想配列ですね。
それであれば、std::map クラステンプレートを使うことで実現できます。
std::map<std::string, std::string> ken;
ken["北海道"] = "札幌市";
ken["宮城県"] = "仙台市";
...
std::cout << ken["東京都"] << std::endl;
本当にハッシュが必要であれば、stdext::hash_map クラステンプレートも使えますが非標準です。
No.3
- 回答日時:
すでに、回答がありますが、現在の標準のC++の標準ライブラリにはハッシュ表を実装しているものはありません。
連想配列は、バランス木を使った map です。線形順序がつけられる要素であれば map でも十分でしょう。速度的には、よいハッシュ関数があるのならハッシュの方が速いのかもしれませんが、大体は map でも遜色ないスピードがでると思います。ちなみに、将来、標準になるであろうものは、unordered_map というものです。TR1(technical report)に入っていて、GNU コンパイラなどでは用意されています。ただし、「多バイト文字を basic_string<char> や basic_ostream<char> に扱わせて移植性はあるのか?」という問題はありますけれど(笑)まあ、しかし、perl に比べて、初期設定が面倒ですよねぇ。。
====
#include <tr1/unordered_map>
#include <iostream>
#include <utility>
#include <string>
int main()
{
typedef std::pair<const std::string, std::string> pair;
pair a[] = {
std::make_pair("北海道", "札幌市"),
std::make_pair("宮城県", "仙台市"),
std::make_pair("東京都", "東京(新宿区)"),
std::make_pair("愛知県", "名古屋市"),
std::make_pair("大阪府", "大阪市"),
std::make_pair("広島県", "広島市"),
std::make_pair("福岡県", "福岡市"),
std::make_pair("沖縄県", "那覇市"),
};
pair *a_end = a + sizeof a / sizeof a[0];
std::tr1::unordered_map<std::string, std::string> hm(a, a_end);
std::cout << hm["北海道"] << '\n';
std::cout << hm["沖縄県"] << '\n';
}
===
% ./a.out
札幌市
那覇市
No.2
- 回答日時:
連想配列が必要ならばstd::mapが利用できますが、std::mapに使われているアルゴリズムは二分木です。
二分木とハッシュは共に連想配列を実現しますが、どちらを使用するかはメモリ使用量と効率のトレードオフです。また、ハッシュの性能はハッシュ関数次第です。ハッシュはSTLに含まれないので、ハッシュを使う必要があるならばBoost等サードパーティのライブラリを利用するか自分で実装しましょう。実装方法はB. Stroustrup「プログラミング言語 C++」等が参考になります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 転職 長く続けられる好条件の求人でしょうか? 3 2023/07/12 18:45
- その他(国内) 北海道札幌市 神奈川県横浜市 愛知県名古屋市 大阪府大阪市 京都府京都市 兵庫県神戸市 福岡県福岡市 2 2023/01/27 22:00
- その他(宿泊・観光) 北海道札幌市 神奈川県横浜市 愛知県名古屋市 大阪府大阪市 京都府京都市 兵庫県神戸市 福岡県福岡市 3 2023/02/12 10:22
- その他(宿泊・観光) 北海道札幌市 神奈川県横浜市 愛知県名古屋市 大阪府大阪市 京都府京都市 兵庫県神戸市 福岡市福岡市 3 2023/01/29 18:14
- その他(国内) 3時!夜中なのか早朝なのか微妙な時間、5時に出るならシャワー浴びてお茶淹れて神棚、仏壇 2 2022/05/20 03:58
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- Excel(エクセル) エクセルの参照について教えていただけますでしょうか 1 2022/12/16 11:35
- 転職 下記のような募集は、良い会社でしょうか?どう思いますか?入ってみたら良くない事が無いでしょうか? 4 2023/03/03 16:40
- メディア・マスコミ 日本はなんで? 右寄り左寄りの地方紙があるんですか? 12 2023/06/21 07:59
- 就職 なんで田舎の人って、 いきなり都内に進学や就職をしてしまい、 3 2022/08/04 20:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlのサブルーチンの引数に配...
-
文字列を変数名として扱う方法
-
ハッシュ値が一致したデータは...
-
チェックデジットについて
-
Perlの名前付き引数について
-
ハッシュのキーを追加する方法
-
列挙型と連想配列の違いを教え...
-
画面を強制的に再描画させる方法
-
Escキーを押すと、中断する時と...
-
UWSCの終了の仕方
-
VBA Boxが空白の場合のメッセー...
-
Perlで参照のクリアの方法
-
DoEventsが必要な理由について
-
【VBA】全て空白のセルの列の非...
-
乱数の桁数指定、または範囲指定。
-
条件に一致した塩基配列を含む...
-
CやJAVa,Rubyなどプログラミン...
-
CSVファイルの特定の行だけを読...
-
VBAでln関数の計算
-
EXCEL VBA If~Else~構文の内容...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perl 文字列検索後に指定フィー...
-
文字列を変数名として扱う方法
-
ハッシュ検索はなぜ速い
-
チェックデジットについて
-
まったく同じファイルのハッシ...
-
英語でのシャープとコメの呼び...
-
列挙型と連想配列の違いを教え...
-
重複ファイルを削除したいので...
-
短いハッシュの作り方
-
ハッシュリストって単にハッシ...
-
ハッシュ値によるファイルの同...
-
文字列をハッシュにしなければ...
-
ハッシュマーク以降のアドレス取得
-
perlで配列名を動的に作り出したい
-
*(アスタリスク)の意味
-
ハッシュ値が一致したデータは...
-
ハッシュのハッシュを実現したい。
-
動的なハッシュの配列を作成したい
-
レコードセットを配列のハッシ...
-
mapのポインタ
おすすめ情報