はじめに
本記事はネタである。 ハッシュドポテイトうんめなー
今日もハッシュドポテイト食べたいなー
よし、作ろう
1. ポテトを用意する
// ポテト struct { std::uint8_t taste; // 味 std::uint8_t fragrance; // 香り std::uint8_t freshness; // 新鮮さ std::uint8_t size; // 大きさ };
まずはポテトを用意した。 評価する要素として、テキトーに4つ用意した
2. ポテトの下ごしらえ
ハッシュドポテトを作る前にきっちり水で洗い、皮をむきましょう。特に芽には気をつけましょう。
// ポテト struct Potate { union { struct { std::uint8_t taste; // 味 std::uint8_t fragrance; // 香り std::uint8_t freshness; // 新鮮さ std::uint8_t size; // 大きさ }; std::uint32_t individual; // 個体値 }; };
同じポテトでも、それぞれ個性は違うもの!ここでは各要素をまとめた個体値を定義した。
3. ハッシュしていく
いよいよ準備したポテトをハッシュしていく
// ポテト struct Potate { union { struct { std::uint8_t taste; // 味 std::uint8_t fragrance; // 香り std::uint8_t freshness; // 新鮮さ std::uint8_t size; // 大きさ }; std::uint32_t individual; // 個体値 }; bool operator ==(const Potate& other) const { return this->individual == other.individual; } bool operator !=(const Potate& other) const { return this->individual != other.individual; } }; template<> struct std::hash<Potate> { std::size_t operator()(const Potate& potate) const { return potate.individual; } };
よし!! これでポテトは無事にハッシュできるようになったわけだ。
4. 油で揚げる
ハッシュされただけでハッシュドポテトといえるのだろうか? 否!、しっかり油で揚げる必要がある。 カリッカリだからおいしいのだ!
しっかりハッシュされいるポテトは揚げるとしましょう。
// ハッシュできてれば揚げてよし template<class T> constexpr bool is_hashed = std::is_invocable_r_v<std::size_t, std::hash<T>, T>; // ハッシュドポテト using HashBrowns = std::conditional_t<is_hashed<Potate>, Potate, void>;
これでハッシュドポテトの完成です!!!
5. 食べる!!
おいしいハッシュドポテトをせっかく作ったので感想を言いましょう。
int main() { // 感想 using Impressions = std::unordered_map<HashBrowns, std::string>; Impressions impressions; HashBrowns potate{5, 5, 5, 5}; impressions[potate] = "The potate Delicious!!!"; std::cout << impressions[potate] << std::endl; }
とっても、おいしいですね!!
まとめ
今回は、ハッシュドポテトの作り方を学びました。
皆さんも是非、ハッシュドポテトを作って、召し上がってください!