사용자가 데이터를 입력하는 순서를 유지해야하지만 중복을 제거해야합니다. 나는지도를 보았지만 중복 된 것을 제거했지만 사용자가 입력 한 순서를 유지하는 것은 불가능하다. 세트에 같은 문제가 있습니다. 두 요구 사항을 모두 충족시킬 수있는 stl의 데이터 구조가 있습니까? 나는이 프로젝트에서 부스트를 사용할 수 없다.삽입 순서를 유지하고 중복을 제거하기위한 C++의 데이터 구조
2
A
답변
1
지도와 목록을 관리하십시오. 각 요소에 대해 목록에 추가하기 전에지도를 검색하십시오. 발견되지 않으면, 목록에 추가하고지도에 삽입하고, 그렇지 않으면 계속하십시오.
2
검색 순서를 유지하면 중복을 검색하는 데 비용이 많이 소요되므로 두 가지 모두를 수행하는 데이터 구조를 찾지 않는 것이 문제입니다. C++ 11에서는 std::unordered_set
을 소개합니다.
C++ 11을 사용하지 않으면 클래스의 일부 표준 컨테이너를 캡슐화 할 수 있습니다. set
또는 map
에 항목을 올린 다음 vector
에 항목에 반복기를 저장하는 것이 좋습니다.
0
#include <cstdlib>
#include <iostream>
#include <random>
#include <vector>
#include <unordered_set>
using namespace std;
int main(int argc, char *argv[])
{
std::vector<int> data;
std::unordered_set<int> uniqueCollection;
for(int i = 0; i < 50; ++i)
{
int newData = rand() % 27;
cout << "trying to insert: " << newData << endl;
if(uniqueCollection.find(newData) == uniqueCollection.end())
{
cout << " inserting item: " << newData << endl;
data.push_back(newData);
uniqueCollection.insert(newData);
}
else
{
cout << " element already exists: " << newData << endl;
}
}
return 0;
}
http://www.cplusplus.com/reference/unordered_set/unordered_set/
관련 문제
- 1. 삽입 순서를 유지하고 키로 조회 할 수있는 C++ 데이터 구조
- 2. 중복을 제거하기위한 빈 기능
- 3. 인접한 중복을 제거하기위한 pcre 정규식
- 4. C의 표준 데이터 구조 라이브러리?
- 5. ANSI C의 트리 데이터 구조
- 6. C의 일반적인 데이터 구조 라이브러리
- 7. 빠른 검색 및 삽입 순서를 지원하는 영구 데이터 구조 (스칼라에서)?
- 8. 대략적으로 중복을 제거하기위한 이상적인 메모리 내 데이터 구조. 100,000 개의 정수
- 9. 중복을 허용하지 않고 입력 순서를 유지하는 데이터 구조가 있습니까?
- 10. C의 일반 구조
- 11. Objective-C의 데이터 구조 란 무엇입니까?
- 12. time_t 오브젝트를 주문하기위한 C의 동적 데이터 구조?
- 13. 중복을 유지하고 모든 고유 라인을 삭제해야합니다.
- 14. 데이터 구조 - 순서대로 삽입/업데이트
- 15. 빠른 삽입 및 필터링을위한 최상의 데이터 구조
- 16. Java에서 목록의 순서를 유지하고 효율성을 높여야합니다.
- 17. C의 중첩 구조
- 18. 대물 렌즈 c의 구조
- 19. C의 구조 및 목록
- 20. 파일 C의 구조 읽기 #
- 21. C의 배열 복사 C/C의 구조 복사
- 22. 최신 데이터를 유지하고 csv 파일에서 다른 중복을 제거하는 Linux 명령
- 23. 다른 테이블에 중복을 삽입하기위한 테이블 구조 변경
- 24. 중복을 허용하고 파일에 저장할 수있는 정렬 된 maplike 데이터 구조
- 25. 데이터 구조 -리스트의 시작에 노드를 삽입
- 26. 삽입, 삭제, 랜덤 액세스가 좋은 데이터 구조
- 27. 캔트 삽입 다중 데이터 필요 구조
- 28. C의 데이터 구조는?
- 29. 이 PHP 코드의 사용을 제거하기위한 MySQL 쿼리
- 30. 빠른 검색/삽입/제거 (알려진 유한 도메인에서)를위한 C의 데이터 구조
당신이 세트와 같은 무엇을 의미합니까? 세트가 주문됩니다. – texasbruce
@texasbruce : set은 삽입 순서를 유지하지 않는 map과 같습니다. –
몇 개의 요소가 있습니까? 10 대? 1000 년대? 1000000? 100000000s? 10000000000s? – Yakk