Associative Array of Events

An associative array of events is legal, but you are correct that it takes an assignment to an array element to construct it. Both an event trigger → and event control @ are just references.

Unfortunately, there is no such thing as a built-in event constructor, so you have to make your own.

module event_associative_array;
  // String-indexed
   event e_str[string];
   
   function automatic event new_event();
      event e;
      return e;
   endfunction    
   initial begin
      e_str["a"]=new_event();
      forever begin
	 @(e_str["a"]);
	 $display("Triggered");
      end
   end
   
   // Stimulus
   initial begin
      #10;
      ->e_str["a"];
      #10 $finish;
   end   
endmodule

Note that uvm_event_pool accomplishes the same thing.