コンテンツにスキップ

最終更新:2026-10-12

C++ 短縮URLサービス Demo

本物の短縮URLは比較的複雑で、例えばハッシュアルゴリズムや採番システムなどが必要になります。

今日はあくまで小規模プロジェクトの観点から、短縮URLの実装をシミュレートします。

わずか数十行のコードでどうやって素早く実現するのでしょうか?その中で鍵となるいくつかのポイント:

  • 長いURLをどのように短縮するか
  • マッピング関係をどのように保存するか

マッピング関係は言うまでもなく、map を 1 つ用意してメモリに永続化します。データベースが絡む場合は、jdbc/odbc などのデータベースインターフェース経由で書き込む必要があります。

長いURLの短縮には、ここでは乱数アルゴリズム+固定長という考え方を採用します。

1.乱数

uniform_int_distribution を使って [a, b] 区間の乱数を生成します。ここでは毎回以下の文字列からランダムに 1 文字を取り出し、最後に連結すれば短縮URLのできあがりです。

string characters{
      "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"};

含まれているのは:

  • 数字
  • 小文字
  • 大文字
uniform_int_distribution<int> distribution(0, characters.size() - 1);
string code;
for (int i = 0; i < length; ++i)
  code += characters[distribution(generator)];

2.保存

毎回それを map に保存するだけです。例えば:

if (links.count(originalLink)) {
  return links[originalLink];
}

shortCode = generateRandomCode(len);
string shortenedLink = base_url + shortCode;
links[shortenedLink] = originalLink;

ここでは基本の url を残しています。例えば:

string baseUrl = "https://www.google.com.hk/search";
LinkShortener shortener(baseUrl);

string originalLink = "https://www.google.com.hk/search?q=asdsad&oq=asdsad&aqs=chrome.0.69i59j69i57j69i59l2.634j0j4&sourceid=chrome&ie=UTF-8";
string shortenedLink = shortener.shortenLink(originalLink, 8);

最後に、この url を次のように短縮できます:

https://www.google.com.hk/searchtXuOlOSt

とても簡単でしょう。この節のテストと完全なコードは星球で更新済みです。ぜひ参加して一緒に学び、成長していきましょう〜

関連トピック

コメント