>백엔드 개발 >C++ >std::map의 키와 값을 벡터로 효율적으로 추출하는 방법은 무엇입니까?

std::map의 키와 값을 벡터로 효율적으로 추출하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-29 20:30:11599검색

How to Efficiently Extract Keys and Values from a std::map into Vectors?

std::map에서 벡터로 키 또는 값 검색

std::map에서 모든 키 또는 값을 벡터로 검색 벡터는 일반적인 작업이지만 std::map 자체에는 이 목적을 위한 명시적인 멤버 함수가 부족합니다. 한 가지 접근 방식은 제공된 코드에 설명된 대로 사용자 정의 펑터를 정의하는 것입니다.

struct RetrieveKey
{
    template <typename T>
    typename T::first_type operator()(T keyValuePair) const
    {
        return keyValuePair.first;
    }
};

map<int, int> m;
vector<int> keys;

// Retrieve all keys
transform(m.begin(), m.end(), back_inserter(keys), RetrieveKey());

// Dump all keys
copy(keys.begin(), keys.end(), ostream_iterator<int>(cout, "\n"));

이 솔루션은 지도 외부의 데이터를 조작하는데, 이는 경우에 따라 이상적이지 않을 수 있습니다. 간단한 for 루프를 활용하는 대체 접근 방식은 더 명확하고 명시적인 솔루션을 제공합니다.

map<int, int> m;
vector<int> key, value;
for (auto it = m.begin(); it != m.end(); ++it) {
  key.push_back(it->first);
  value.push_back(it->second);
  cout << "Key: " << it->first << endl;
  cout << "Value: " << it->second << endl;
}

이러한 방식으로 맵을 반복하면 키와 값을 모두 벡터 컨테이너로 직접 추출할 수 있습니다.

Boost 라이브러리를 사용하는 경우 또 다른 옵션은 프로세스를 더욱 단순화합니다.

map<int,int> m;
pair<int,int> me; // what a map<int, int> is made of
vector<int> v;
BOOST_FOREACH(me, m) {
  v.push_back(me.first);
  cout << me.first << "\n";
}

이 버전은 간결합니다. 읽을 수 있으며 검색 프로세스에 대한 명시적인 제어를 제공합니다. 가장 적절한 방법을 선택하는 것은 개발자의 특정 요구와 선호도에 따라 다릅니다.

위 내용은 std::map의 키와 값을 벡터로 효율적으로 추출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.