マップとベクトルは大きく異なります。
あなたが尋ねた実際の質問への短いバージョン:
カスタマイズされたマップで行うのが既存のキー(operator [])とpush_backのキーベースのルックアップだけである場合、vectoroperator[]とpush_backのみを使用するvectorの非効率的なドロップイン置換のように機能する可能性があります。はい。
あなたがしていることがおそらく実際にはあなたが望んでいるものではない理由についての背景を提供する長いバージョン:
マップにはインデックスがなく、キーがあります。マップは通常、赤黒木として実装されます。このようなデータ構造により、キーに基づく効率的なルックアップが可能になります。通常、特定の要素のキーに関心があり、キー自体に重要な情報が含まれています。キーは通常連続しておらず、マップはマップで使用されていないキーにスペースを割り当てません。
ベクトルは、連続したメモリのブロックです。これにより、効率的なインデックス付きアクセスが可能になります。インデックスはキーと同じではありません。通常、特定の要素がどのインデックスを取得するかは気にせず、どのインデックスを取得するかは挿入の順序によって異なります(キーはマップ内の挿入順序とは無関係です)。ベクトルへのインデックスは常に整数値であり、連続していないインデックスを持つことはできません。
マップで行うのが独自のカスタムpush_backだけである場合、外部では、一部のコンテキストではベクトルのように機能するように見える場合があり、他のコンテキストでは機能しない場合があります(イテレーターの無効化など)。
例で追加される要素のキーは実際には気にしないため、マップの選択は無意味です。ベクトルでのインデックス付きルックアップは高速になり、メモリのオーバーヘッドは小さくなります(ただし、非常に多くのオブジェクトを割り当てると、メモリの断片化の問題が発生する可能性がありますが、それは別の主題です)。
そして最後に、使用するコンテナクラスがわからない場合は、vectorとlistから始めてください。これら2つの違いを理解し、どちらを使用する必要があるかを理解してから、マップ、セット、「マルチ」バリアント、「順序付けされていない」バリアントなど、より高度な特殊なコンテナに移動します。