На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
Страницы: (7) « Первая ... 5 6 [7]  все  ( Перейти к последнему сообщению )  
> Выбор типа дерева (структура данных) для хранения данных в БД , БД "Гараж из автомобилей"
    Кстати, по мап-у.
    А если часто используется поиск и полный перебор по всем данным?
    Сообщение отредактировано: Black_Dragon -
      Цитата Black_Dragon @
      А если часто используется поиск и полный перебор по всем данным?

      Немношко неправильный вопрос!

      "часто используется поиск" - это вывоз поисковой процедуры
      "полный перебор" - это вызов поисковой процедуры в условиях неупорядоченных данных

      Если ты хотел спросить "а если часто используется поиск" (гораздо чаще операций вставки) - то ответ прост: используй упорядоченные мапы. Хотя.. я об этом уже писал чуть ранее. Ну а если желаешь "полный перебор" - понятное дело, неупорядоченные мапы.
        Цитата JoeUser @
        "полный перебор" - это вызов поисковой процедуры в условиях неупорядоченных данных

        for (auto &itmain : mainBase)
          Цитата Black_Dragon @
          or (auto &itmain : mainBase)

          Ну если > c++11, то где-то так.
            Цитата Black_Dragon @
            А если часто используется поиск и полный перебор по всем данным?

            По идее проще всего написать и проверить. Зависеть может много от чего - от адекватности хеш-функции, от частоты коллизий, от фазы Луны, в конце-концов :D
              Вообщем провел тест, тестовый набор 7,5 тыс записей
              ExpandedWrap disabled
                namespace MapBench
                {
                    TEST_CLASS(TestMap)
                    {
                    public:
                        size_t test_find_count = 400000000;
                        size_t test_all_count = 1000000;
                        size_t test_arr = 8;
                        CMacAddr arrmac[8] = { CMacAddr(0x0036A9F36550), CMacAddr(0x002A23B31D00), CMacAddr(0x0025D2D1E778), CMacAddr(0x5661562BD93C), CMacAddr(0x40758E924A3C), CMacAddr(0xC1F0F3FD8CA0), CMacAddr(0x0B629D565000), CMacAddr(0xAE8FDD0C5E4C) };
                        TEST_CLASS_INITIALIZE(ClassInitialize)
                        {
                            SNMPManager::getManager()->startup();
                            if (SQLOpen())
                            {
                                int size_bd = SQLReadBase();
                                Assert::IsTrue(size_bd > 0);
                                SQLClose();
                            }
                            else Assert::Fail(L"Don't Open");
                        }
                        TEST_CLASS_CLEANUP(ClassCleanup)
                        {
                            SNMPManager::getManager()->cleanUp();
                        }
                        TEST_METHOD(FindMap)
                        {
                            for (size_t iter = 0; iter < test_find_count; ++iter)
                            {
                                for (size_t ind = 0; ind < test_arr; ++ind)
                                {
                                    auto it = mainBase.find(arrmac[ind]);
                                    Assert::IsTrue(it != mainBase.end());
                                }
                            }
                        }
                        TEST_METHOD(AllMap)
                        {
                            for (size_t iter = 0; iter < test_all_count; ++iter)
                            {
                                for (auto &it : mainBase)
                                {
                                }
                            }
                            Assert::IsTrue(true);
                        }
                    };
                }


              ExpandedWrap disabled
                #define ETHER_ADDR_LEN 6
                typedef u_char macaddr[ETHER_ADDR_LEN];
                union unmacaddr
                {
                    macaddr m_mac; // mac адрес
                    UINT64  m_64mac = 0;
                    struct
                    {
                        UINT32 m_l;
                        UINT32 m_h;
                    } m_32x2;
                 
                    unmacaddr() {}
                    explicit unmacaddr(UINT64 mac) : m_64mac(mac) {}
                };
                class CMacAddr
                {
                public:
                    unmacaddr u;
                 
                public:
                    // Создание нулевого МАК-адреса
                    CMacAddr() {}
                    CMacAddr(const macaddr ptr) { for (size_t i = 0; i < ETHER_ADDR_LEN; ++i) u.m_mac[i] = ptr[i]; }
                    CMacAddr(const CMacAddr &obj) { u = obj.u; }
                    explicit CMacAddr(UINT64 obj) : u(obj) {};
                    // Создание МАК-адреса из текстовой строки, true - успешно
                    static bool ConvertFromCStr(const CStr &txt, CMacAddr *ma);
                    //CMacAddr(const CStr &txt);
                    CStr Str() const;
                    CWideStr WStr() const;
                    bool IsZero() const { return (u.m_64mac == 0); }
                    bool IsBroadcast() const { return (u.m_64mac == 0xFFFFFFFFFFFF); }
                    CMacAddr &operator=(const UINT64 &obj) { u.m_64mac = obj; return *this; }
                    bool operator<(const CMacAddr &obj) const { return (u.m_64mac < obj.u.m_64mac); }
                    bool operator>(const CMacAddr &obj) const { return (u.m_64mac > obj.u.m_64mac); }
                    bool operator==(const CMacAddr &obj) const { return (u.m_64mac == obj.u.m_64mac); }
                    bool operator!=(const CMacAddr &obj) const { return (u.m_64mac != obj.u.m_64mac); }
                };
                 
                namespace std
                {
                    template <> struct hash<CMacAddr>
                    {
                        using argument_type = CMacAddr;
                        using result_type = size_t;
                        result_type operator()(const argument_type &key) const
                        {
                            return static_cast<result_type>(key.u.m_32x2.m_l + key.u.m_32x2.m_h);
                        }
                    };
                };
                typedef std::unordered_map<CMacAddr, PDevice> mapMacDev;
                mapMacDev   mainBase;


              std::map
              Прикреплённая картинка
              Прикреплённая картинка

              std::unordered_map
              Прикреплённая картинка
              Прикреплённая картинка
              Сообщение отредактировано: Black_Dragon -
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0670 ]   [ 17 queries used ]   [ Generated: 29.03.24, 14:57 GMT ]