fork download
  1. #include <iostream>
  2. #include <boost/unordered_map.hpp>
  3.  
  4. using namespace std;
  5.  
  6. #define PEERS_KEY
  7.  
  8. class peer_key_c
  9. {
  10. public:
  11. peer_key_c(int host, int uid)
  12. {
  13. host_ = host;
  14. #ifdef PEERS_KEY
  15. uid_ = uid;
  16. #else
  17. (void)uid;
  18. #endif
  19. }
  20.  
  21. bool operator==(peer_key_c v) const
  22. {
  23. #ifdef PEERS_KEY
  24. return host_ == v.host_ && uid_ == v.uid_;
  25. #else
  26. return host_ == v.host_;
  27. #endif
  28. }
  29.  
  30. bool operator<(peer_key_c v) const
  31. {
  32. #ifdef PEERS_KEY
  33. return host_ < v.host_ || host_ == v.host_ && uid_ < v.uid_;
  34. #else
  35. return host_ < v.host_;
  36. #endif
  37. }
  38.  
  39. friend std::size_t hash_value(const peer_key_c& v)
  40. {
  41. std::size_t seed = boost::hash_value(v.host_);
  42. #ifdef PEERS_KEY
  43. boost::hash_combine(seed, v.uid_);
  44. #endif
  45. return seed;
  46. }
  47.  
  48. int host_;
  49. #ifdef PEERS_KEY
  50. int uid_;
  51. #endif
  52. };
  53.  
  54. struct t_peer
  55. {
  56. long long downloaded;
  57. long long uploaded;
  58. time_t mtime = 0;
  59. int uid;
  60. short port;
  61. bool left;
  62. std::array<char, 20> peer_id;
  63. };
  64.  
  65. typedef boost::unordered_map<peer_key_c, t_peer> t_peers;
  66.  
  67. int main() {
  68. std::cout << "sizeof(t_peer) = " << sizeof(t_peer) << " bytes, total data size: " << sizeof(t_peer) * 10000 << " bytes" << std::endl;
  69. std::cout << "sizeof(peer_key_c) = " << sizeof(peer_key_c) << " bytes, total data size: " << sizeof(peer_key_c) * 10000 << " bytes" << std::endl;
  70.  
  71. return 0;
  72. }
Success #stdin #stdout 0s 3276KB
stdin
Standard input is empty
stdout
sizeof(t_peer) = 48 bytes, total data size: 480000 bytes
sizeof(peer_key_c) = 8 bytes, total data size: 80000 bytes