목록알고리즘/C++ (3)
척척석사가 되어보자
c++에서 Trie 구조를 최적화 하였다. 최적화한 노드를 입력된 용어에 대해 search해야 하므로 노드구조를 저장해주어야 한다.c++에서 구조를 저장해주는 serialization 기능을 boost에서 지원해준다고 한다. 우선, boost를 빌드해주어야 한다.이 링크에 boost를 빌드해주는 과정이 상세히 적혀있다. http://psychoria.tistory.com/entry/Boost-Boost-%EB%B9%8C%EB%93%9C-%EB%B0%A9%EB%B2%95http://psychoria.tistory.com/158빌드과 꽤 오래 걸린다. 준비만 하는데 한두시간 걸렸다.. 빌드가 끝나면 boost공식 사이트대로 tutorial을 따라해 보자.https://www.boost.org/doc/libs..
class node를 정의하는데 자식이 여러개인 경우 , 배열로 만들자니 메모리 낭비가 너무 크고, 포인터로 만들자니 너무 복잡해져서 라이브러리 vector를 사용하기로 하였다. 다음과 같이 정의하고 class node {private:노드 정보....vector child;} child.push_back(n);이렇게 넣어주었다. vector가 list보다 좋은 점은 배열처럼 index로 접근 할수 있다는 점이다. 지금 하는 작업중에서, 노드의 순서를 바꾸는 작업은 없고 인덱스를 통해 접근해야하는 과정이 많기 때문에 vector를 사용하였다. hash_set이 아닌 hash_map을 사용한 이유는 타입이 다른 두 가지의 정보를 저장해야하기 때문이다. 정의는 hash_map incode;이렇게 해주면 된다..
class 내에서 static 함수를 쓰는 경우 : 특정 객체의 함수가 아닌 전역함수처럼 사용하기 위해서. 오히려 함수의 인자에 모두 객체의 정보가 들어간다면 static함수를 사용하는 것은 비효율적이다. 클래스내의 static을 사용할 때 static 멤버 변수와 static 멤버 함수가 있다. static 멤버 변수는 모든 객체가 공유하게 되는 변수가 된다.static 멤버 함수도 모든 객체가 객체의 정보에 상관없이 같은 함수를 처리하게 된다. (공유된다고 할수 있나?) 따라서, 내가 지금 작업하고 있는것을 살펴보면, 위 함수는 클래스 내에 있는 static 함수인데, 모든 인자에 노드의 정보를 필요로 하고있다. 이 경우, static을 사용하는 것은 비효율적이라 할 수 있다. 따라서 다음과 같이 수..