• 티스토리 홈
  • 프로필사진
    디지털 블리자드
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
디지털 블리자드
  • 프로필사진
    디지털 블리자드
    • 분류 전체보기 (65)
      • 과제(숙제) (19)
      • 컴퓨터관련 (20)
      • 윈도우7 (26)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • C#에서 C++의 multimap, unordered_multimap을 사용해보기
        2024년 06월 19일
        • 디지털 블리자드
        • 작성자
        • 2024.06.19.오후03:39

         

        저는 코딩 초보입니다.

        아래 내용은 코딩 초보가 거하게 삽질한 내용입니다 참고바랍니다.

        C#에서는 C++의 std::multimap과 std::unordered_multimap 같은 컨테이너가 없습니다.

        그래서 보통은 2가지의 C# STL을 사용하여 std::multimap과 std::unordered_multimap 같은 컨테이너를 만들어 사용하게 됩니다.

        하지만 저는 C++의 std::multimap과 std::unordered_multimap 를 C#에 끌어와서 써보고 싶었습니다.

        검색을 해보니 여러가지 정보를 얻을 수 있었습니다.

        C++의 코드를 C#에서 사용하려면 C++/CLI을 이용해서 Wapping 으로 코드를 감싸서 사용하는 방법이 있더군요.

        C++/CLI를 설치를 해서 이것저것 시도 해봤습니다.

        C++의 템플릿 변수와 제너릭 변수가 서로 호환이 안되서 삽질을 많이 했습니다.

        이거때문에 거하게 삽질하였고 코드가 맘에 들지 않는 노가다성 코드가 되어버렸습니다.

        C#에서 제너릭 변수를 클래스로 지정할 때, 포인터를 사용하려고 했으나... C#에서 포인터가 안되는 관계로 다른 방식으로 우회하여 구현했습니다.

        multimap클래스 내부에서 클래스값을 따로 들고 있게끔 구현하여 해결했습니다만 문제가 있습니다.

        클래스 값을 Key값으로 가지고 있으면 메모리 누수가 발생하는 문제가 있습니다.

        잘못구현했나 싶기도 합니다...이부분은 좀더 고민을 해볼 필요가 있을 것 같습니다..

        뭔소리냐하면 C# multimap에 erase(iter), erase(First_iter, Last_iter) 이 함수들로는 키값제거가 안됩니다.

        erase(Key) , Clear() 함수를 호출해야 키값이 제거됩니다.

        다행히도 클래스를 Value 값으로 설정하는 것은 메모리 누수는 발생하지 않습니다.

        C# enum과 C++ enum은 변환하기 어려운 관계로 그냥 막아버렸습니다.

        enum 값을 굳이 사용하고 싶다면 int 값으로 형변환해서 사용하시길 바랍니다.

        그리고 foreach는 사용 가능합니다.

        대신에 형변환을 해야됩니다.

        테스트 목적이긴 합니다만 일단 올려봅니다.

        코드가 마음에 들지 않는 노가다성 코드라서 좋은 코드는 아닌듯하고 누군가가 여기저기에서 사용하다가 심각한 오류에 직면하실 수도 있으실것 같아 걱정이됩니다.

        사용중에 문제가 생긴다면 본인들 책임입니다.ㅋ

        begin, end, rbegin, rend, cbegin cend crbegin crend 등을 사용할 수 있습니다.

         

        감사합니다.

        -요약-

        C++의 multimap, unordered_multimap을 C#에서 사용할 수 있게 Wapping하였습니다.

         

        -다운로드-

        아래는 C#에서 dll을 추가하여 multimap, unordered_multimap 테스트해본 프로젝트입니다.

        버그를 발견하셨다면 알려주시면 감사하겠습니다.

        https://github.com/naverstarcraft/TestingMultimapsX86

        https://github.com/naverstarcraft/TestingMultimapsX64

         

         

        저작자표시 비영리 변경금지 (새창열림)

        '컴퓨터관련' 카테고리의 다른 글

        중국에서 직구한 불량 메인보드를 고쳤습니다.  (1) 2024.09.15
        윈도우 7 NVMe, USB 3.0 범용드라이버  (0) 2024.08.06
        포맷없이 mbr -> gpt 변경하기  (3) 2023.04.30
        윈도우 11 설치 이미지 다운로드 방법  (0) 2022.05.02
        삼성 H61S1 H61S2 메인보드 바이오스 삽질하기 (장문주의)  (0) 2022.01.16
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바

        단축키

        내 블로그

        내 블로그 - 관리자 홈 전환
        Q
        Q
        새 글 쓰기
        W
        W

        블로그 게시글

        글 수정 (권한 있는 경우)
        E
        E
        댓글 영역으로 이동
        C
        C

        모든 영역

        이 페이지의 URL 복사
        S
        S
        맨 위로 이동
        T
        T
        티스토리 홈 이동
        H
        H
        단축키 안내
        Shift + /
        ⇧ + /

        * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.