본문 바로가기

C++/STL4

C++ vector 를 랜덤으로 섞는 방법, random_shuffle 사용방법 안녕하세요 warehouse입니다. 오늘은 C++ 에서 생성 한 vector 를 마구잡이로 섞는 함수 random_shuffle 에 대해서 알아보려고 합니다. 프로그래밍을 하다보면 vector에 값을 넣는 순서대로 데이터가 저장되어 저장 된 값을 사용할 때 편향성을 갖는 경우가 있습니다. 벡터에 데이터를 쌓아둔 상태에서 사용하고 다시 집어넣는 알고리즘이 있다고 하면, 가장 앞 또는 뒤에있는 데이터가 우선적으로 빠지고, 다시 넣게 될 것입니다. 특별한 구현을 하지 않는다면, 다음 동작에서도 동일하게 동작하겠죠 그런데 여기서 random_shuffle 함수를 이용하면 매 동작마다 꺼내지는 데이터를 섞어 줄 수 있습니다. 이제 코드 예시를 통해 어떻게 동작하는지 봅니다. 테스트 코드 우선 벡터를 하나 만들어 .. 2022. 7. 31.
[C++/STL] std::set 사용방법, 목적 짧은 정리 - 리눅스에서 C++ 개발하기 오늘은 C++개발을 하면서 많이 사용하는 STL 의 std::set 사용하는 방법을 알아보려고 한다. 업무환경은 Redhat 7.3 을 사용하고 있고, 포스팅을 위한 테스트환경은 Ubuntu 임을 알린다. 정의 Set 은 unique element (유일한 요소)를 저장하는 container 이다. 목적 정의 그대로 자료구조에 저장하고자 하는 데이터를 유일하게 관리하고 싶을 때 사용한다. 중복을 제거하는데 도움이 된다. 어떤 프로그램에서 메모리에 id를 관리하고자 한다면, std::set이 제격이다. 그리고 공간 복잡도 측면에서는 비 효율 적이지만, std::vector나 다른 자료구조에서 중복 된 항목들을 제거하고 싶다면, set에 한번 넣어주면 O(N)으로 중복제거가 가능하다. 사용방법 아래 코드를 .. 2022. 1. 27.
[C++] map 에 값을 입력하지 않아도 찾아지는 경우 - map 사용 시 주의사항 C++ 에서 key, value 형식의 데이터를 저장하기 위해서 map 자료구조를 많이 사용하게 되는데, 이 때 조금 주의해야 하는 부분이 있어서 가볍게 정리한다. 우선 내가 하려고 했던 작업은, map 의 find 멤버함수를 이용해서 값이 있는지 여부를 조건문으로 판단하고, 없는 경우 특정 작업을 하려고 했었다. 아래는 코드 예시이다. void doSomething () { std::map mymap; .... do insertion or nothing if ( mymap.find( 'k' ) == mykey.end() ) { // no data } else { // have one func ( mymap[ 'k' ] ); } return; } 위 코드의 의도는 mymap에서 k 라는 키가 있으면 fu.. 2021. 7. 18.
[C++] vector 값과 함께 초기화 하는 방법 오늘 코드를 짜다가 간단히 정리할 거리가 떠올라서 퇴근후에 적어본다. 특정 조건문에서 vector 를 초기화 해야했고, 그 vector 에 들어갈 한개의 값을 가지고 있는 코드였다. 처음에는 아래와 같이 코드를 짰다. int condition_a = 1; string a = "I'm the first"; if ( condition_a == 1 ) { // vector 생성 vector my_list; // a를 삽입 my_list.push_back( a ); ..... } 그런데 가만 생각해보니.. 각종 변수들은 값과 함께 초기화 하는데 만들어놓고 push_back 하는 것은 여러모로 이상하다고 생각했다. 그래서 아래와 같이 코드를 바꿔 별도로 삽입하는 과정을 없앴다. int condition_a = 1.. 2021. 7. 8.