Проверка значения существует в std :: map - C ++

использовать его в начале вместо пробуждения и не использовать Destroy(gameObject);, вы уничтожаете свой игровой объект, тогда вы хотите что-то от него

void Start () {
     BombDropScript =gameObject.GetComponent<BombDrop> ();
     collider = gameObject.GetComponent<BoxCollider2D> ();

     // Call the Explode function after a few seconds
     Invoke("Explode", time);

 }

void Explode() {
//..
  //..
//at last
Destroy(gameObject);
 }

, если вы хотите получить доступ к скрипту в другом объекте gameObject назначить игровой объект через инспектор и получить доступ к нему, как это

 public gameObject another;
void Start () {
     BombDropScript =another.GetComponent<BombDrop> ();
}
30
задан Eric 24 July 2012 в 15:56
поделиться

5 ответов

Можно использовать повышение:: multi_index для создания двунаправленная карта - можно использовать любое значение пары как ключ, чтобы сделать быстрый поиск.

20
ответ дан Mark Ransom 25 July 2012 в 02:56
поделиться
  • 1
    +1 для использования re, это действительно лучше, чем [i for i in string.split() if i.isalnum()] – JadedTuna 17 October 2013 в 05:02

Как насчет того, чтобы использовать другую карту внутренне, которая хранит значение, сочетание клавиш. Таким образом, я могу звонить, находят на нем?

Да: поддержите две карты с одной картой с помощью одного типа ключа и другого использования другой.

находка () в станд.:: карта, делающая последовательный поиск?

No это - двоичный поиск отсортированного дерева: его скорость является O (журнал (n)).

15
ответ дан ChrisW 25 July 2012 в 02:56
поделиться
  • 1
    Если строка будет 'inter-process communication', она будет считать 3 слова – chefarov 19 August 2018 в 22:34

Изучите двунаправленные карты повышения: http://www.boost.org/doc/libs/1_38_0/libs/bimap/doc/html/index.html

Это позволяет обоим значениям действовать как ключ.

Иначе, повторение является способом пойти.

6
ответ дан Evan Teran 25 July 2012 в 02:56
поделиться
  • 1
    @GamesBrainiac: Просто любопытный. Почему Вы стараетесь не использовать regex? – Catbuilts 26 April 2019 в 18:20

Нет, необходимо циклично выполниться по станд.:: отобразите и проверьте все значения вручную. В зависимости от того, что Вы хотите сделать, Вы могли перенести станд.:: карта в простом классе, что также кэши все значения, которые вставляются в карту в чем-то, это легко доступно для поиска и не позволяет дубликаты, как станд.:: набор. Не наследуйтесь станд.:: карта (это не имеет виртуального деструктора!), но переносят его так, чтобы можно было сделать что-то вроде этого:

WrappedMap my_map< std::string, double >;
my_map[ "key" ] = 99.0;
std::set< double > values = my_map.values(); // should give back a set with only 99.0 in it

альтернатива прокрутке Вашего собственного должна была бы использовать Повышение двунаправленная карта, которая легко найдена в сообщениях ниже или Google.

Это действительно зависит от того, что Вы хотите сделать, как часто Вы хотите сделать это, и как трудно это - к самокрутке мало класса обертки по сравнению с установкой и использованием Повышения. Я люблю Повышение, таким образом, это - хороший способ пойти - но существует что-то хорошее и полное о создании Вашего собственного класса обертки. Вы имеете преимущество понимания непосредственно сложности операций, и Вам, возможно, не понадобится полное обратное отображение значений => ключи, это обеспечивается Повышением двунаправленную карту.

2
ответ дан James Thompson 25 July 2012 в 02:56
поделиться
  • 1
    1. Используя i, поскольку действительно вводит в заблуждение неиндексная переменная; 2. Вы don' t должен создать список, it' s, просто тратя впустую память. Предложение: sum(word.strip(string.punctuation).isalpha() for word in s.split()) – Gabriel 6 July 2018 в 05:12

Если у вас есть доступ к отличной библиотеке boost , тогда вам следует использовать boost :: multi_index для создания двунаправленная карта , как говорит Марк. В отличие от std :: map, это позволяет вам искать либо по ключу, либо по значению.

Если у вас есть только STL под рукой, следующий код сделает свое дело (шаблон для работы с любым типом карты, где mapped_type поддерживает оператор ==):

#include <map>
#include <string>
#include <algorithm>
#include <iostream>
#include <cassert>

template<class T>
struct map_data_compare : public std::binary_function<typename T::value_type, 
                                                      typename T::mapped_type, 
                                                      bool>
{
public:
    bool operator() (typename T::value_type &pair, 
                     typename T::mapped_type i) const
    {
        return pair.second == i;
    }
};


int main()
{
    typedef std::map<std::string, int> mapType;

    mapType map;

    map["a"] = 1;
    map["b"] = 2;
    map["c"] = 3;
    map["d"] = 4;
    map["e"] = 5;

    const int value = 3;

    std::map<std::string, int>::iterator it = std::find_if( map.begin(), map.end(), std::bind2nd(map_data_compare<mapType>(), value) );

    if ( it != map.end() )
    {
        assert( value == it->second);
        std::cout << "Found index:" << it->first << " for value:" << it->second << std::endl;
    }
    else
    {
        std::cout << "Did not find index for value:" << value << std::endl;
    }
}
16
ответ дан 27 November 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: