[解決済み] 文字列ベクトル中のある要素の位置を取得し、intsベクトルのインデックスとして使用するには?
2022-10-15 16:24:48
質問
のベクトル中の要素のインデックスを取得しようとしています。
strings
の別のベクトルのインデックスとして使用します。
int
のタイプで、これは可能でしょうか?
例
vector <string> Names;
vector <int> Numbers;
...
// condition to check whether the name exists or not
if((find(Names.begin(), Names.end(), old_name_)) != Names.end())
{ // if yes
cout <<"Enter the new name."<< endl;
cin >> name;
replace(Names.begin(), Names.end(), old_name_, name);
}
の位置を取得したいのですが。
old_name
において
Names
ベクトル内の特定の要素にアクセスする際に使用します。
Numbers
ベクトルです。と言えるように。
Numbers[position] = 3 ; // or whatever value assigned here.
使ってみました。
vector <string> :: const_iterator pos;
pos = (find(Names.begin(), Names.end(), old_name_))
Numbers[pos] = 3;
が、明らかにこれはうまくいきません。
pos
は文字列型だからです!
どのように解決するのですか?
ある要素を指すイテレータを知っていて、その要素のベクトル内の位置を得るには、単純に
v.begin()
をイテレータから引くだけです。
ptrdiff_t pos = find(Names.begin(), Names.end(), old_name_) - Names.begin();
ここで
pos
に対して
Names.size()
を使用して、範囲外であるかどうかを確認します。
if(pos >= Names.size()) {
//old_name_ not found
}
ベクトルイテレータは配列ポインタと似たような動作をします。ポインタ演算について知っていることのほとんどは、ベクトルイテレータにも適用することができます。
C++11 からは
std::distance
を使用できるようになりました。
ptrdiff_t pos = distance(Names.begin(), find(Names.begin(), Names.end(), old_name_));
関連
-
[解決済み】coutはstdのメンバではない
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み】'std::cout'への未定義の参照
-
[解決済み] std::vector<> からインデックスで要素を消すにはどうしたらいいですか?
-
[解決済み] std::vectorのイテレータのインデックスを取得する最も効果的な方法は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない