C++의 벡터에서 요소 인덱스 찾기

Jinku Hu 2023년10월12일
  1. 사용자 지정 함수를 사용하여 C++의 벡터에서 요소 인덱스 찾기
  2. std::find알고리즘을 사용하여 C++의 벡터에서 요소 인덱스 찾기
  3. std::find_if알고리즘을 사용하여 C++의 벡터에서 요소 인덱스 찾기
C++의 벡터에서 요소 인덱스 찾기

이 기사에서는 C++에서 벡터에서 요소 인덱스를 찾는 방법에 대한 몇 가지 방법을 설명합니다.

사용자 지정 함수를 사용하여 C++의 벡터에서 요소 인덱스 찾기

사용자 정의 선형 검색 기능을 사용하여벡터에서 주어진 요소의 위치를 ​​찾을 수 있습니다. 이것은이 문제를 해결하기위한 매우 비효율적 인 방법입니다. 다음 예제 코드에서 정수의벡터를 선언하고 호출이 성공하면 출력하는 임의의 요소 위치를 찾습니다.

#include <iostream>
#include <string>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::string;
using std::vector;

int findIndex(const vector<int> &arr, int item) {
  for (auto i = 0; i < arr.size(); ++i) {
    if (arr[i] == item) return i;
  }

  return -1;
}

int main(int argc, char *argv[]) {
  vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  auto pos = findIndex(arr, 32);
  pos != -1
      ? cout << "Found the element " << 32 << " at position " << pos << endl
      : cout << "Could not found the element " << 32 << " in vector" << endl;

  exit(EXIT_SUCCESS);
}

출력:

Could not found the element 32 in vector

std::find알고리즘을 사용하여 C++의 벡터에서 요소 인덱스 찾기

또는 STL 라이브러리의 일부인std::find알고리즘을 사용할 수 있습니다. 이 함수는 조건을 만족하는 첫 번째 요소에 대한 반복자를 반환합니다. 반면에 요소가 발견되지 않으면 알고리즘은 범위의 마지막 요소를 반환합니다. 하지만 반환 된 이터레이터는 위치를 계산하기 위해begin이터레이터에 의해 감소되어야합니다.

#include <iostream>
#include <string>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::string;
using std::vector;

int findIndex2(const vector<int> &arr, int item) {
  auto ret = std::find(arr.begin(), arr.end(), item);

  if (ret != arr.end()) return ret - arr.begin();
  return -1;
}

int main(int argc, char *argv[]) {
  vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  auto pos2 = findIndex2(arr, 10);
  pos2 != -1
      ? cout << "Found the element " << 10 << " at position " << pos2 << endl
      : cout << "Could not found the element " << 10 << " in vector" << endl;

  exit(EXIT_SUCCESS);
}

출력:

Found the element 10 at position 9

std::find_if알고리즘을 사용하여 C++의 벡터에서 요소 인덱스 찾기

요소의 색인을 찾는 또 다른 방법은std::find_if알고리즘을 호출하는 것입니다. 세 번째 인수가 반복되는 각 요소를 평가하기위한 술어 표현식이 될 수 있다는 점을 제외하면std::find와 유사합니다. 표현식이 true를 반환하면 알고리즘이 반환됩니다. 람다 식을 세 번째 인수로 전달하여 요소가10과 같은지 확인합니다.

#include <iostream>
#include <string>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::string;
using std::vector;

int main(int argc, char *argv[]) {
  vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  auto ret =
      std::find_if(arr.begin(), arr.end(), [](int x) { return x == 10; });

  if (ret != arr.end())
    cout << "Found the element " << 10 << " at position " << ret - arr.begin()
         << endl;

  exit(EXIT_SUCCESS);
}

출력:

Found the element 10 at position 9
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C++ Vector